Laravel Eloquent-用关系构建“哪里不”查询

时间:2018-06-25 14:27:07

标签: php laravel eloquent

我有5个数据库行,它们具有相同的client_id,其中3个标记为completed, Yes

此代码按预期完成了3个结果:

$indGoal = $client->indGoal()->where('completed','=','Yes')->get();

此代码没有任何结果:我希望是2。

$indGoal = $client->indGoal()->where('completed','!=','Yes')->get();

This question建议添加->orWhereNull('completed')-可以,但忽略client_id关系。该请求会带来所有非Yes的结果,而不考虑$client

我的客户模型供参考:

public function indGoal()
{
    return $this->hasMany('App\Models\IndGoal');
}

1 个答案:

答案 0 :(得分:1)

您应在回调中将orWhere个过滤器分组,以免干扰现有过滤器。

$indGoal = $client->indGoal()
    ->where(function ($query) {
        $query->orWhere('completed', '!=', 'yes')
            ->orWhereNull('completed');
    })
    ->get();

通过这种方式,查询构建器知道任何分组条件都应该为真,而所有其他条件都是独立的。