简体   繁体   中英

Laravel 5 – querying items by many-to-many related model

I've got a following many-to-many relation:

attendees - attendee_tag - tag

Now I want to filter attendees based on some tag value, so I've created this solution, which works well:

$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);

But I can't figure out, how to filter attendees based on more than 1 tag ... I've tried this, but it doesn't work:

$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);

Any help would be highly appreciated! :)

Maybe with separating the 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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM