【发布时间】:2021-12-13 17:43:47
【问题描述】:
我发布了我认为是 Laravel 错误 (https://github.com/laravel/framework/issues/39398) 但它已关闭,因为我不是 100% 认为它确实是一个错误。其他人能否告诉我这种行为是否错误?
我有以下代码:
$user=251;
$description='created';
Activity::when($user, function ($query, $user) {
return $query->where('causer_id', $user)
->orWhere(function($query) use ($user) {
$query->where('subject_id', $user)
->where('subject_type', "App\\User");
});
})->when($description, function ($query, $description) {
return $query->where('description', $description);
});
从逻辑上讲,我认为它应该生成一个查询,该查询返回具有正确用户和正确描述的所有行,但无论描述如何,我都会获得该用户的所有行。
上面的代码产生了这个 sql 查询:
select * from activity_log where causer_id = '251' or (subject_id = '251' and subject_type = 'App\User') and description = 'created'
...而我认为它应该产生:
select * from activity_log where (causer_id = '251' or (subject_id = '251' and subject_type = 'App\User')) and (description = 'created')
简而言之:when() 函数不应该在返回的结果周围加上括号以不影响查询的其他部分吗?它不是一个错误吗?
【问题讨论】:
标签: laravel laravel-8 laravel-query-builder