繁体   English   中英

Laravel 5 –通过多对多相关模型查询项目

[英]Laravel 5 – querying items by many-to-many related model

我有以下多对多关系:

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

但是我不知道如何基于多个标签来过滤参与者...我已经尝试过了,但这是行不通的:

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

任何帮助将不胜感激! :)

也许将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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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