我目前正在尝试使用Eloquent查询构建器来创建具有多个子句的联接,其中一个是IN子句。
我要创建的查询类型为
image: python:2.7.13
clone:
depth: full
pipelines:
branches:
master:
- step:
script:
- git push "https:/...
我尝试过
SELECT * FROM trusts t
LEFT JOIN trust_group tg ON tg.trust_id = t.id
AND tg.group_id IN (1,2,4)
这将导致
->leftJoin('trust_group', function($join) {
$join->on('trust_group.trust_id', '=', 'trusts.id');
$join->on('trust_group.group_id', 'IN', [1,2,4]);
})
我也尝试过
and `trust_group`.`group_id` = `IN`
但这会导致查询中包含类似
的内容->leftJoin('trust_group', function($join) {
$join->on('trust_group.trust_id', '=', 'trusts.id');
$join->on(DB::raw('trust_group.group_id IN (1,2,4)'));
})
(显然,这些组ID是出于示例目的,并且是动态的)
口才可以在联接中支持IN子句吗?
这只是相当大的查询的一部分,因此宁愿使用联接而不是使用and trust_group.group_id IN (1,2,4) = ``
答案 0 :(得分:1)
由于目前这是一个僵局,因此我将其发布为答案,直到正式PRed。不幸的是,尚未正式支持使用In子句进行连接。 closed thread
中有一些讨论您可以将其用作原始查询:
<?php
$results = DB::select("
SELECT * FROM trusts t
LEFT JOIN trust_group tg ON tg.trust_id = t.id
AND tg.group_id IN (?)", $groupIds);
如果您想从结果数组中获得大量信息,还可以使用Model::hydrate($array)
方法。
答案 1 :(得分:1)
这是一篇很老的帖子,但对于任何搜索者,您现在可以简单地使用 where
函数来构建更复杂的连接(在 Laravel 7 中测试):
->leftJoin('trust_group', function($join) {
$join
->on('trust_group.trust_id', '=', 'trusts.id')
->whereIn('trust_group.group_id', [1, 2, 4])
;
})