在 laravel 中查看多对多关系
Posted
技术标签:
【中文标题】在 laravel 中查看多对多关系【英文标题】:View Many to Many Relationship in laravel 【发布时间】:2021-03-16 04:49:36 【问题描述】:产品型号代码:
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"]
我可以知道如何显示与特定产品相关的类别名称吗?
【问题讨论】:
【参考方案1】:belongsToMany
或hasMany
表示这有很多相关的模型。对于这些关系,laravel 返回一个集合而不是一个对象。所以你不能像$product->categories->name
这样直接得到一个属性,因为类别是这里的一个集合。您必须像
@foreach ($product->categories as $category)
$category->name
@endforeach
现在您可以访问该产品的所有相关类别并获取它们的属性。
【讨论】:
很高兴有帮助:)【参考方案2】:@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 对象的相关类别记录的集合,而不是对象 - 因此出现错误
【讨论】:
【参考方案3】:由于类别是一个集合,您可以对其进行迭代或从 laravel 集合方法中受益并从中提取您想要的属性。
通过将 pluck 方法的结果转换为数组,您可以将它们内爆并显示为字符串。下面的代码可以帮助你:
implode(', ', $product->categories->pluck('name')->toArray())
【讨论】:
以上是关于在 laravel 中查看多对多关系的主要内容,如果未能解决你的问题,请参考以下文章