2017-08-18 25 views
1

私は、次の多対多の関係持っている:今、私はいくつかのタグ値に基づいて参加者をフィルタリングするLaravel 5 - 多対多関連のモデルによる照会項目

attendees - attendee_tag - tag

を、私はうまく機能し、この溶液を作成しました:

$attendees = Attendee::whereHas('tags', function ($q) { 
    $q->where([ 
     ['attendee_tag.tag_id', '=', '6'], 
     ['attendee_tag.value_string', '=', 'Summer ticket'] 
})->with(['tags' => function($q) { 
     $q->select('tags.id', 'value_type', 'attendee_tag.value_string', 'attendee_tag.value_int'); 
}])->paginate($pagination); 

をしかし、私は1個の以上のタグをもとに参加者をフィルタリングする方法を、把握することはできません...「私はこれを試してみたが、それはdoesnの仕事:

$attendees = Attendee::whereHas('tags', function ($q) { 
    $q->where([ 
     ['attendee_tag.tag_id', '=', '6'], 
     ['attendee_tag.value_string', '=', 'Summer ticket'] 
    ])->where([ 
     ['attendee_tag.tag_id', '=', '13'], 
     ['attendee_tag.value_string', '=', 5] 
    ]); 
})->with(['tags' => function($q) { 
    $q->select('tags.id', 'value_type', 'attendee_tag.value_string', 'attendee_tag.value_int'); 
}])->paginate($pagination); 

ご協力いただければ幸いです。 :)

+1

をあなたは 'whereIn'機能 https://laravel.com/docs/5.4/queries#where-clauses – Wreigh

+0

フムを使用することができますが、どうやって?私に例を教えてもらえますか? – user3216673

答えて

0

たぶんwhereHas分離して:

$attendees = Attendee::whereHas('tags', function ($q0) { 
    $q0->where([ 
     ['attendee_tag.tag_id', '=', '6'], 
     ['attendee_tag.value_string', '=', 'Summer ticket'] 
    ]); 
})->whereHas('tags', function ($q1) { 
    $q1->where([ 
     ['attendee_tag.tag_id', '=', '13'], 
     ['attendee_tag.value_string', '=', 5] 
    ]); 
})->with(['tags' => function($q) { 
    $q->select('tags.id', 'value_type', 'attendee_tag.value_string', 'attendee_tag.value_int'); 
}])->paginate($pagination); 
+0

私はORを望んでいません...私は欲しいです...そして、あなたの "多対多の関係"とは何を意味しますか? – user3216673

+0

Laravelモデルでは、Many To Manyリレーションシップを宣言できます。https://laravel.com/docs/5.4/eloquent-relationships#many-to-many ORとANDについて理解しています。あなたが書いたリクエストに加えていくつかの生のSQLを使用する – EkinOf

+0

私はwhereHasのタグを使用していますので、(もちろん)宣言しなければなりません:) – user3216673

関連する問題