产品型号代码:
public function categories()
{
return $this->belongsToMany(Category::class);
}
类别模型代码:
public function products()
{
return $this->belongsToMany(Product::class);
}
产品控制器代码:
$products = Product::with('categories')->get();
index.blade.php代码:
@foreach ($products as $product)
<li>Product Name: {{$product->name}}</li>
<li>Category: {{ $product->categories->name }}</li>
@endforeach
当我使用上述index.blade.php代码时,以下错误显示:
试图获取非对象的属性“名称”。
然后我尝试将index.blade.php代码修改为以下内容:
<li>Category: {{ $product->categories }}</li>
然后在我的index.blade.php中得到以下输出:
[{"id":1,"name":"Cameras"}]
请问我如何显示与特定产品有关的类别名称?
发布于 2020-12-04 05:34:13
belongsToMany
或hasMany
意味着这有许多相关的模型。laravel为这些关系返回一个集合,而不是一个对象。所以您不能直接获得类似于$product->categories->name
的属性,因为类别在这里是一个集合。您必须循环遍历集合,例如
@foreach ($product->categories as $category)
{{ $category->name }}
@endforeach
现在,您可以访问该产品的所有相关类别并获取它们的属性。
发布于 2020-12-04 05:36:12
@foreach ($products as $product)
<li>Product Name: {{$product->name}}</li>
<ul>
@foreach($product->categories as $category)
<li>Category: {{ $category->name }}</li>
@endforeach
</ul>
@endforeach
$product->categories
是$product对象的相关类别记录的集合,而不是对象--因此出现了错误。
发布于 2020-12-04 05:43:23
由于类别是一个集合,您可以迭代它,也可以从laravel收集方法中受益,并且从它中提取出您想要的属性。
通过将pluck方法的结果转换为数组,您可以将它们内爆并显示为字符串。下面的代码可以帮助您:
implode(', ', $product->categories->pluck('name')->toArray())
https://stackoverflow.com/questions/65138386
复制相似问题