首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用拉拉看多到多的关系

用拉拉看多到多的关系
EN

Stack Overflow用户
提问于 2020-12-04 05:27:17
回答 3查看 130关注 0票数 0

产品型号代码:

代码语言:javascript
运行
复制
public function categories()
{
    return $this->belongsToMany(Category::class);
}

类别模型代码:

代码语言:javascript
运行
复制
public function products()
{
    return $this->belongsToMany(Product::class);
}

产品控制器代码:

代码语言:javascript
运行
复制
$products = Product::with('categories')->get();

index.blade.php代码:

代码语言:javascript
运行
复制
@foreach ($products as $product)
    <li>Product Name: {{$product->name}}</li>
    <li>Category: {{ $product->categories->name }}</li>
@endforeach

当我使用上述index.blade.php代码时,以下错误显示:

试图获取非对象的属性“名称”。

然后我尝试将index.blade.php代码修改为以下内容:

代码语言:javascript
运行
复制
<li>Category: {{ $product->categories }}</li>

然后在我的index.blade.php中得到以下输出:

代码语言:javascript
运行
复制
[{"id":1,"name":"Cameras"}]

请问我如何显示与特定产品有关的类别名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-04 05:34:13

belongsToManyhasMany意味着这有许多相关的模型。laravel为这些关系返回一个集合,而不是一个对象。所以您不能直接获得类似于$product->categories->name的属性,因为类别在这里是一个集合。您必须循环遍历集合,例如

代码语言:javascript
运行
复制
@foreach ($product->categories as $category)
    {{ $category->name }}
@endforeach

现在,您可以访问该产品的所有相关类别并获取它们的属性。

票数 1
EN

Stack Overflow用户

发布于 2020-12-04 05:36:12

代码语言:javascript
运行
复制
@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对象的相关类别记录的集合,而不是对象--因此出现了错误。

票数 0
EN

Stack Overflow用户

发布于 2020-12-04 05:43:23

由于类别是一个集合,您可以迭代它,也可以从laravel收集方法中受益,并且从它中提取出您想要的属性

通过将pluck方法的结果转换为数组,您可以将它们内爆并显示为字符串。下面的代码可以帮助您:

代码语言:javascript
运行
复制
implode(', ', $product->categories->pluck('name')->toArray())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65138386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档