2016-07-01 9 views
2

私はしばらくの間これを苦労してきました。 私は特定のピボットcategoryを含むすべての「製品」を得ることはできません。Laravelカテゴリを持つすべてのレコードを取得

だから私はルートを持っている:と

Route::get('products/{category}', ['as' => 'category.products', 'uses' => '[email protected]']); 

と製品モデル:

public function categories() 
{ 
    return $this->belongsToMany(Category::class); 
} 

をそして、私のコントローラ:

public function getCatProducts($categoryUrl) 
{ 
    $products = Product::get(); 

    $productsWithCat = []; 

    // loop through all projects 
    foreach($products as $product) { 

     // loop through all categories assigned to product 
     $categories = $product->categories; 
     foreach($categories as $category) { 

      // check if product has category from url 
      if ($category->title == $categoryUrl) { 
       array_push($productsWithCat, $product); 
      } 
     } 
    } 

    $category = $categoryUrl; 
    $products = $productsWithCat; 

    return view('pages.category-products', compact('products', 'category')); 
} 

だから、これは動作しますが、おそらくそこにありますこれを行うもっと良い方法です。以下のような 何か:

$products = Product::with('categories.title', $categoryUrl)->get(); 

はまた、私のやり方はもう、配列ではなく、コレクションを返すので、私も私のブレードのカテゴリに取得することはできません。

誰かが私を助けてくれることを願っています。

ありがとうございます!

答えて

3

あなたは、この特定に所属するすべての製品のコレクションを返すために、CategoryモデルにbelongsToManyメソッドを実装する必要があるかもしれませんがあり、もっと良い方法があるとあなたが接近していた...

$products = Product::with('categories') 
    ->whereHas('categories', function($q) use ($categoryUrl) { 
     $q->where('title', $categoryUrl); 
    })->get(); 
+0

恐ろしい、高速応答をありがとう! – MarvinVK

1

一緒にカテゴリを渡した。コントローラの使用では

// Category.php 

public function products() 
{ 
    return $this->belongsToMany(Product::class); 
} 

$products = Category::with('products')->where('title', $categoryName)->get(); 
+0

もう片方が 'belongsToMany'であるので、それは' belongsToMany'でなければならないと信じています – user3158900

+0

それは多対多関係であるので、あなたは正しいです。私は自分の答えを編集します。ありがとう –

関連する問題