【问题标题】:View Many to Many Relationship in laravel在 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"}]

我可以知道如何显示与特定产品相关的类别名称吗?

【问题讨论】:

    标签: php database laravel many-to-many relationship


    【解决方案1】:

    belongsToManyhasMany 表示这有很多相关的模型。对于这些关系,laravel 返回一个集合而不是一个对象。所以你不能像$product-&gt;categories-&gt;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-&gt;categories 是 $product 对象的相关类别记录的集合,而不是对象 - 因此出现错误

    【讨论】:

      【解决方案3】:

      由于类别是一个集合,您可以对其进行迭代或从 laravel 集合方法中受益并从中提取您想要的属性。

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

      implode(', ', $product->categories->pluck('name')->toArray())
      

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 2019-02-07
        • 2018-11-02
        • 2015-05-29
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 2013-03-05
        • 2021-07-02
        相关资源
        最近更新 更多