如何在orWhere周围创建括号:
public function categories()
{
return $this->belongsToMany('App\Category', 'user_category')->orWhere('default', 1);
}
所以它被转换为:
where (`user_category`.`user_id` = ? or `default` = 1)
目前这里的括号丢失了,弄乱了整个查询。我试过例如:
public function categories()
{
$join = $this->belongsToMany('App\Category', 'user_category')
->orWhere('default', 1);
return $this->where(function ($query) use ($join) {
return $join;
});
}
但在这里,我正在失去我的模型并获得Call to undefined method Illuminate\Database\Query\Builder::...
答案 0 :(得分:0)
您可以使用advanced where clause之类的:
Model::where(function ($query) {
$query->where('a', '=', 1)
->orWhere('b', '=', 1);
})->where(function ($query) {
$query->where('c', '=', 1)
->orWhere('d', '=', 1);
});
或嵌套条款like:
Model::where(function($query)
{
$query->where('a', 'like', 'keyword');
$query->or_where('b', 'like', 'keyword');
})
->where('c', '=', '1');
答案 1 :(得分:0)
您是否尝试获取与用户相关的所有类别以及default
字段为1的类别?
如果是这种情况:
public function categories()
{
return $this->belongsToMany('App\Category');
}
public function relatedCategories()
{
return App\Category::all()->where('default',1)->merge($this->categories);
}
relatedCategories()
方法应返回包含所需类别的集合。请注意,与default=1
不相关的非相关类别不会包含pivot
对象,因为您的数据透视表中不存在这些类别。