2016-09-20 58 views
1

如何創建括號我orWhere:Laravel belongsToMany與OR條件

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

您可以使用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'); 
+0

這就是我所嘗試過的。但是這對'belongsToMany'有效嗎? $ query-> belongsToMany()在這個函數中不起作用。這就是爲什麼我試圖用'use($ join)'來獲取它,但仍然無法使用。 – PiTheNumber

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對象,因爲這些類別在數據透視表中不存在。

+0

對,看起來不錯,但它仍然會返回類別模型。 'categories()'返回BelongsToMany對象和用戶模型作爲父類,所以你仍然可以從用戶調用查詢範圍方法。 – PiTheNumber