【发布时间】:2020-08-15 19:00:25
【问题描述】:
我正在使用 Laravel 6 和 mysql 7
我有以下查询
$tasks = Task::where('deleted_at', null)->where('company_id',$company_id);
$tasks = $tasks->where('created_by',$user_id);
$tasks = $tasks->orWhereIn('id',$task_ids);
当我打印它时它会生成下面的原始查询
SELECT * FROM `tasks` WHERE `deleted_at` IS NULL AND `company_id` = 25 AND `created_by` = 20 OR
`id` IN(112,...215) ORDER BY `id` DESC
现在 ID 112 已被删除,但仍显示在结果中,虽然我有 where('deleted_at', null) 条件但它不起作用
我也想在$task_ids 上应用所有其他条件
如何通过优化查询来实现这一点?
已更新:这是完整的场景
我想选择所有由我创建或分配给我的记录。这是我的完整代码。
$tasks = Task::where('deleted_at', null)->where('company_id',$company_id);
$tasks = $tasks->where('created_by',$user_id);
$task_ids = TaskUser::where('user_id',$user_id)->pluck('task_id')->all();
$tasks = $tasks->orWhereIn('id',$task_ids);
【问题讨论】:
-
where A and B and C or D,所以id=112记录成功通过条件D。 -
所以如果你想要
condition A (deleted_at is null)对condition D (where in 112...)生效。您可以将您的代码更改为where A and (B and C or D)或where (A and B and C) or (A and D)
标签: laravel eloquent where-clause