2017-11-24 11 views
0

私は、本、person、およびperson_bookを記述する3つのテーブルを持っています。これらは、次のようになります。ピボットテーブルのフィールドを選択します。laravel 5.4

book -> id, name 
author -> id, name 
book_person -> book_id, person_id, status (pivot table) 

関係がOKであり、これは聖霊降臨祭laravelのORM私のテーブル

books   person  book_person 
1 | book1  1|Peter id | book_id| person_id|status 
2 | book2  2|Ren  1 | 1 | 1  | 1 
3 | book3     2 | 1 | 2  | 0 
          3 | 2 | 2  | 1 
          4 | 3 | 2  | 1 

あり、どのように私は唯一の人を得ることができる '2' の状態= 1

(REN)

イム私のコントローラ

$bp = Book::find(2); 

をし、私の見解でこれをやって

@foreach($bp->person as $p) 
    $p->pivot->id 
    $p->pivot->status 
@endforeach 
and this bring me 
book_person (2,3,4) but i cant select only the status 1 

book_personにモデルがない場合、どこで 'where'クエリを実行できますか?

+0

Personモデルとは関係がありますか? – C2486

答えて

0

これらのリレーションが多数ある場合は、wherePivotを使用して、ピボットテーブルに格納されたデータに基づいてフィルタリングすることができます。

$bp = Book::find(2); 
$persons = $book->persons()->wherePivot('status', 1)->get(); 

また、読み込むこともできます。そして、あなたはあなたの意見を引き続き使用します。

$bp = Book::with(['persons' => function ($q) { 
    $q->wherePivot('status', 1); 
}])->find(2); 
+0

'$ bp'は' $ book'を意味していますか?ここで '$ bp = Book :: find(2);' – C2486

0

モデル関係については言及していませんでした。テーブルを結合してlaravel DBクエリを使用する

$result = DB::table("person as p") 
->join("book_person as bp","bp.person_id","=","p.id") 
->join("book as b","bp.book_id","=","b.id")//if you want book detail also 
->where('p.id','2') 
->where('bp.status',1) 
->get(); 
関連する問題