用于搜索两个表的雄辩查询

lzfw57am  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(288)

我正在使用laravel5.6中的elokent来解决以下问题。
我需要退回所有有问题的问题 tag_id5 分配给他们的 project_id 以及 item_id 从问题表中匹配 project_id 以及 issue_id 从我的透视表。
问题表:

数据透视表的问题:

我尝试了下面的代码,但是它返回了issue表中的所有问题,但是期望是3个结果。
预期结果
结果从 issues 表应为id 1、4和5。

$issues = Issue::join('issues_tags', 'issues_tags.project_id', 'issues_tags.issue_id')->where('issues_tags.tag_id', 5)->select('issues.*')->get();
kuhbmx9i

kuhbmx9i1#

您需要指定issues表,而不是join上的issues\u标记。左连接也有助于减少结果。既然你用两个不同的键连接,你就得用闭包。

$issues = Issue::leftJoin('issues_tags', function($join) {
    $join->on('issues.project_id', '=', 'issues_tags.project_id');
    $join->on('issues.item_id', '=', 'issues_tags.issue_id');
})
->where('issues_tags.tag_id', 5)->select('issues.*')->get();

如果表确实应该在project\u id->project\u id和issues.id->issues\u tags.issues\u id上匹配,那么可以修改第二个join子句。

相关问题