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');
})
我模型中的事件方法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');
})