【问题标题】:Laravel : How to access many to many relationship data AskLaravel:如何访问多对多关系数据
【发布时间】:2017-08-07 01:45:01
【问题描述】:

我有具有多对多关系的类别和子类别表

class Category extends Model {

    protected $table='categories';
    protected $fillable=['name'];
    public function subcategories() {
        return $this->belongsToMany('App\Modules\Subcategory\Models\Subcategory', 'categories_subcategories', 'category_id', 'subcategory_id');
    }
}

子类

class Subcategory extends Model {

    protected $table='subcategories';
    protected $fillable=['name'];

    public function categories()
    {
        return $this->belongsToMany('App\Modules\Category\Models\Category', 'categories_subcategories', 'subcategory_id', 'category_id');
    }

}

在控制器中

public function catSubList()
    {
        $subcategories = Subcategory::with('categories')->get();
        return view('Subcategory::category_subcategory',compact('subcategories'));
    }

但是当我尝试使用以下视图访问数据时,在视图中

@foreach($subcategories as $row) 
                    <td>{{$i}}</td>
                    <td>{{$row->name}}</td>  
                    <td>{{$row->categories->name}}</td>

@endforeach

我收到如下错误:

Collection.php 第 1527 行中的 ErrorException:此集合实例上不存在属性 [名称]。 我如何访问$row-&gt;categories-&gt;name?请问有人有建议吗?

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    您必须创建另一个 foreach() 循环,因为您的子类别属于多个类别。 row-&gt;categories 返回一个集合,而不是一个对象。因此错误。

    <td>{{$row->name}}</td>  
    <td>{{$row->categories->name}}</td>
    
    @foreach($row->categories as $category)
        <td>{{$category->name}}</td>
    @endforeach
    

    更新

    获取包含所有子类别的类别。只需反转您的查询

    $category = Category::with('subcategories')
    ->where('name', '=', 'cars')
    ->first(); 
    //will return you the category 'cars' with all sub categories of 'cars'. 
    

    无需预先加载

    $category = Category::find(1);
    $subacategories = $category->subcategories;
    
    return view('Subcategory::category_subcategory', compact('category', subcategories));
    

    【讨论】:

    • 我如何只打印那些只有 caregory 的子类别而不是获取所有子类别..意味着我正在获取子类别列表..我不需要..
    • 在控制器中反转查询。检查我的更新。
    • 这给了我这个错误QueryException in Connection.php line 647: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'subcategories.categories_subcategories' in 'where clause' (SQL: select * from subcategories` where subcategories.categories_subcategories in ())` 我没有放 where 子句..我只是使用 $categories = Category::with('subcategories')-&gt;get(); 我得到了错误,因为我想要数据库中的列表
    • 您正在尝试加载所有子类别的所有类别。它无法加载关系。绝对与这里的关系有关。请尝试在不急于加载的情况下加载以确认我的理论。查看我的更新以了解如何在不急切加载的情况下加载。
    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2015-04-05
    • 2017-01-17
    相关资源
    最近更新 更多