2017-02-18 162 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'是一个object/stdClass,而不是您的'Product'模型的一个实例。你可以发布你用来获取'$ products'变量的代码吗? – Jonathon

回答

2

您的问题是您使用Laravel的查询生成器而不是Eloquent,但您将结果视为是Eloquent。

当你这样做:

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

$products变量将包含一个Paginator实例,其中包含您的项目为stdClass实例。如果你希望能够与雄辩做到这一点,你应该尝试这样的事:

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

这将确保该项目在分页程序返回的是你Product雄辩模型的实例,与category关系急切装(即它会加载使用一个查询返回的每个Product的类别关系,而不是5个查询,每个Product一个)。您可以访问$product->category->name

+0

谢谢你,你是一个天才。我不敢相信我犯了这样的错误。 –

+0

不客气。很高兴它帮助你:] – Jonathon

相关问题