我有以下查询:
$owned = ['leads.user_id' => $this->crmUser->id, "leads.delegated_user_id" => null];
$delegated = ['leads.delegated_user_id' => $this->crmUser->id];
$leads = \Lead::where($owned)
->where("leads.status", "!=", "Archived")
->orWhere($delegated)
->where("leads.status", "!=", "Archived")
->rightJoin("tasks", "tasks.lead_id", "=", "leads.id")
->where('tasks.due_date', '<', date("F j, Y", strtotime('-10 days')))
->where("tasks.completed_at", null)
->get()->toArray();
\Log::debug(var_export($leads, true));
但是......
->where("tasks.completed_at", null)
被忽略了。我是一名新手开发者,我不太明白为什么会这样。我认为该子句应该适用于它之前的所有逻辑。显然,我错了。
答案 0 :(得分:2)
有很多条件(有些重复),我不确定应该以什么顺序应用它们。我的猜测是数据库服务器也很难。
你应该在这种情况下对你的条件进行分组。在Eloquent中,可以使用where()方法中的匿名函数来实现分组。如果你想将最后一个条件应用于它之前的所有条件,你可以这样做:
\Lead::rightJoin("tasks", "tasks.lead_id", "=", "leads.id")
->where(function($q) use ($owned, $delegated)
{
$q->where($owned)
->orWhere($delegated)
->where("leads.status", "!=", "Archived")
->where('tasks.due_date', '<', date("F j, Y", strtotime('-10 days')));
})
->where("tasks.completed_at", null)
->get()->toArray();
尝试并根据需要进行调整,如果我没有得到正确的顺序。
答案 1 :(得分:0)
您应该使用Eloquent语法。试试
->whereNull("tasks.completed_at")
验证该字段是否为NULL。