2017-02-18 4 views
0

안녕 저는 laravel 교육 프로젝트를 진행하고 있습니다. 각 제품 카테고리 이름을 얻으려고 할 때 모델과 관계에 문제가 있습니다. 여기
내 제품 모델laravel의 범주 관계 정의되지 않은 속성 : stdClass ::

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Product extends Model 
{ 
    public function category() 
    { 
    return $this->belongsTo('App\Category'); 
    } 
} 

내 카테고리의 모델입니다

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    protected $table = 'categories'; 

    public function products() 
    { 
     return $this->hasMany('App\Product'); 
    } 
} 

나는 내가 실행하는 동안이

 @foreach($products as $product) 
     <tr> 
     <td>{{ $product->id }}</td> 
     <td>{{ $product->name }}</td> 
     <td>{{ $product->category->name }}</td> 
     </tr> 
     @endforeach 

같은 각 제품에 대한 카테고리 이름을 얻을 때 이 오류가 발생하는 페이지

Undefined property: stdClass::$category (View: /var/www/html/projectname/resources/views/my/products/index.blade.php) 

누구든지이 오류의 원인을 알려 줄 수 있습니까? 여기 갱신

은 테이블 구조를
제품입니다 : 아이디, 이름, category_id-> 부호()
카테고리 : ID, 이름을
여기에 내가 $ 제품을 얻을하는 데 사용하는 코드입니다

$user_id = Auth::user()->id; 
    $products = DB::table('products')->where('user_id', $user_id)->paginate(5); 
    return view('my.products.index')->withProducts($products); 
+0

잘못된 외래 키의 문제 일 가능성이있는 제품 및 카테고리의 테이블 구조를 표시하십시오. –

+0

@OdinThunder 게시 내용을 업데이트하여 테이블 구조를 확인하십시오. 그리고 나에게 돌아 가라. –

+0

당신의 에러 메시지는'$ product'가'Product' 모델의 인스턴스가 아니라 객체/stdClass라고 제안한다. '$ products' 변수를 얻는데 사용했던 코드를 게시 할 수 있습니까? – Jonathon

답변

2

당신의 문제는 Eloquent 대신 Laravel의 쿼리 작성기를 사용하고 있지만 Eloquent 인 것처럼 결과를 처리하고 있다는 것입니다.

당신이 할 경우 :

$products = DB::table('products')->where('user_id', $user_id)->paginate(5); 

$products 변수는 stdClass의 인스턴스와 같은 항목을 포함하는 Paginator 인스턴스를 포함 할 것이다. 당신은 설득력이 작업을 수행 할 수 있도록하려는 경우에는이 같은 것을 시도해야한다 :

$products = Product::with('category')->where('user_id', $user_id)->paginate(5); 

이 보장됩니다 항목이 매기기에 반환 된 당신의 Product 웅변 모델의 인스턴스가 category 관계를 열망로드와이다 (즉, 각 Product에 대해 5 개의 쿼리가 아닌 하나의 쿼리를 사용하여 반환 된 각 Product에 대한 범주 관계를로드합니다.

그러면 $product->category->name에 액세스 할 수 있습니다.

+0

고맙습니다. 당신은 천재입니다. 나는 내가 그런 실수를했다는 것을 믿을 수 없다. –

+0

당신을 진심으로 환영합니다. 다행이 당신을 도왔습니다 :] – Jonathon