我正在使用hasMany和belongsTo处理Laravel关系。它适用于hasMany
关系,但是我在belongsTo
上有问题,无法收集foreach循环。这是我的categories
表。
id name
--------------
1 food
还有products
表。
id name category_id
----------------------------------
1 pizza 1
2 hamburger 1
下面是hasMany
产品模型。
# Product.php
public function products()
{
return $this->hasMany(Product::class);
}
下面是belongsTo
类别模型。
# Category.php
public function category()
{
return $this->belongsTo(Category::class, 'id');
}
刀片出现错误:
试图获取非对象的属性
<tbody>
@foreach ($products as $product)
<tr>
<td> {{ $product->category->name }} </td>
</tr>
@endforeach
</tbody>
对此,我们将不胜感激,
答案 0 :(得分:2)
问题在于方法的定义。 belongsTo
方法的第二个参数是外键列名称。试试这个:
# Product.php
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
但是,由于您的外键是型号名称,后跟_id
(category_id
),因此Laravel默认会查找该键。.因此,您可以这样简化它:>
# Product.php
public function category()
{
return $this->belongsTo(Category::class);
}
...在上面的示例中,雄辩者将尝试匹配
post_id
从Comment
模型到id
模型上的Post
。雄辩 通过检查名称来确定默认外键名称 关系方法,并在方法名后加上_
后缀 按主键列的名称。但是,如果外键在Comment
模型不是post_id
,则可以传递自定义键名称 作为belongsTo
方法的第二个参数:/** * Get the post that owns the comment. */ public function post() { return $this->belongsTo('App\Post', 'foreign_key'); }
答案 1 :(得分:1)
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
而不是category()中的'id',而是使用'category_id'.....,因为您已经给category_id指定了外键....因此laravel会搜索它...