2017-03-16 115 views
0

我有類別和子類別表多對多的關係Laravel:如何訪問多對多的關係數據向

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 

我喜歡的錯誤:

ErrorException在Collection.php行1527:屬性[名]不上這個集合實例存在。 如何訪問$row->categories->name?有人建議請嗎?

回答

1

你必須做另一個foreach()循環因爲你的子類屬於ToMany類別。 row->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)); 
+0

相反讓所有的子類別如何打印只有那些小類誰擁有隻有類別.. ..means我得到子類別列表..我不需要.. – Hola

+0

在您的控制器中反轉您的查詢。檢查我的更新。 – EddyTheDove

+0

這給了我這個錯誤QueryException在Connection.php行647: SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'subcategories.categories_subcategories'(SQL:select * from'子類別'其中'子類別()中的'.'categories_subcategories'' 我沒有放過where clasuse ..我只是用'$ categories = Category :: with('subcategories') - > get();'我得到了錯誤因爲我想從數據庫列表 – Hola