[英]Laravel query builder when grouping
I've started with Laravel for a week now and something bother me about the Query Builder and the when
clause.我已经开始使用 Laravel 一周了,查询生成器和
when
子句让我感到困扰。
I'm using it like so:我这样使用它:
$query->when($filters['full-time'] ?? false, fn ($query) =>
$query->where('contract_type', JobPositionsEnum::class::FullTime)
);
$query->when($filters['location'] ?? false, fn ($query, $location) =>
$query->where('location', 'like', '%' . $location . '%')
);
$query->when($filters['search'] ?? false, fn ($query, $params) =>
$query->where('position', 'like', '%' . $params . '%')
->orWhere('description', 'like', '%' . $params . '%')
->orWhereHas('company', function ($query) use ($params) {
$query->where('name', 'like', '%'.$params.'%');
})
);
With this query I was hoping received an SQL request looking like this:通过这个查询,我希望收到一个如下所示的 SQL 请求:
SELECT * FROM `jobs`
WHERE `contract_type` = 'Full time'
AND `location` like '%United%'
AND (`position` like '%S%' or `description` like '%S%' or EXISTS (SELECT * FROM `companies` WHERE `jobs`.`company_id` = `companies`.`id` and `name` like '%S%'))
But instead I'm receiving this:但相反,我收到了这个:
SELECT * FROM `jobs`
WHERE (
`contract_type` = 'Full time' and
`location` like '%United%' and
`position` like '%S%' or `description` like '%S%' or EXISTS (
SELECT * FROM
`companies`
WHERE `jobs`.`company_id` = `companies`.`id`
and `name` like '%S%'
)
)
I'm not sure to understand why the when
group my query when I don't want to, did you know what I'm missing here?我不确定为什么
when
我不想时将我的查询分组,你知道我在这里缺少什么吗?
You should use an additional where to group the or conditions.您应该使用额外的where对or条件进行分组。
Your last when should look like this:你最后的时间应该是这样的:
$query->when($filters['search'] ?? false, function ($query) use ($params) {
$query->where(function ($query) use ($params) {
$query->where('position', 'like', '%' . $params . '%')
->orWhere('description', 'like', '%' . $params . '%')
->orWhereHas('company', function ($query) use ($params) {
$query->where('name', 'like', '%' . $params . '%');
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.