Laravel 关系查询中的优先级或运算符 (hasMany)。如何添加括号?

Laravel prioritize or operator in relation query (hasMany). How to add parenthesis?

我模型中的事件方法returns 来自数据库的所有相关事件。下面的代码工作正常,唯一的问题是它没有优先考虑或。 (参见 orWhereHas

public function events()
{
    return $this->hasMany(Event::class)
        ->orWhereHas('organisations', function(Builder $query){
            $query->where('organisation_id', $this->id);
        });
}

当我在代码的其他地方扩展查询时,出错了:

$model->events()->whereNull('some_field')

因为它应该优先考虑 OR 运算符。但是我不知道在这种情况下该怎么做,因为我正在模仿模型关系中的查询。

所以问题是:如何在查询中添加括号来优先考虑 or 运算符?

您可以将逻辑移到关系方法之外并使用 where/orWhere 闭包。

public function events()
{
    return $this->hasMany(Event::class)
}
$model->events()
    ->where(function ($sub) {
        $sub->orWhereHas('organisations', function(Builder $query){
                $query->where('organisation_id', $this->id);
            })
            ->orWhereNull('some_field');
    })