Laravel属于ToMany,状态为

时间:2016-09-20 10:12:03

标签: php mysql laravel

如何在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::...

2 个答案:

答案 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对象,因为您的数据透视表中不存在这些类别。