2017-07-07 19 views
1

私は2つのテーブルを持っています プロジェクトは複数のカテゴリの下にある可能性があるので、多対多の関係を持つプロジェクトとカテゴリ。PHP Laravel manytomany eloquent distinct query

Laravel 5.4では、category_projectピボットテーブルを使用する2つのモデルでmanytomany関係を設定しました。

カテゴリの配列の下にあるすべてのプロジェクトを取得したいと思います。私はそれているためであると仮定しかし、私はFindメソッドを見つけるために、IDの配列を渡すとき、私はエラーを取得「メソッドのプロジェクトが存在しない」単一のカテゴリについては

これは罰金

$Projects = Category::find(1)->projects()->distinct(); 

の作品コレクションを返す

$Projects = Category::find([1,2])->projects()->distinct(); 

私は正しい方法を考えていますか?カテゴリID(この例では1と2)のリストのプロジェクトを取得するには、何が必要ですか。

答えて

1

カテゴリ1またはカテゴリ2に属している別個のプロジェクトが必要な場合は、その逆の方向に進むのが簡単です。

$categories = [1,2]; 
$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
     return $query->whereIn("category_id",$categories); 
}])->get(); 

あなたは、あなたがこのために

$projects = Projects::whereHas(["category" => function ($query) use ($categories) { 
    return $query->where(collect($categories)->map(function ($v) { 
      return ["category_id",$v]; 
    })); 
}])->get(); 
+0

感謝にあなたの状態を変更することができ、両方のカテゴリーに属しているプロジェクトをしたい場合は ...私は、これは行く与えます!取得の最後にページ設定()を付けることができますか?私はそれを試してみる...私は雄弁にはかなり新しいです、そして、collect()とmap()メソッドは私にとって初めてです。彼らが何をするかを学ぶのに良い時間です...もう一度感謝します。 – user1002794

+0

@ user1002794 'collect'は雄弁に直接関係していません。これは、基本的には配列に対するLaravelのOOP/Fluent置換であり、モデル結果セットでも使用される[Laravel collections](https://laravel.com/docs/5.4/collections)に関連しています。 – apokryfos