2014-01-14 26 views
2

我正在使用新的whereHas方法在Laravel 4.1中的加載關係上添加約束。WhereHas()/ orWhere沒有按預期限制查詢

$broadcast = $broadcast->whereHas('season', function($query) use ($parameterValues){ 
       $query->where('name', '2011-12'); 
      }); 
     } 

在這個例子中,我在尋找一個足球/足球直播,其中的關係是廣播belongsTo一個賽季

我想補充的球隊(俱樂部)的約束,其中的關係是那一個廣播hasOne homeClub和一個廣播hasOne客場。我想對於將球隊(利物浦),或者是在家中或離開俱樂部的結果,所以我嘗試使用orWhereHas - a featured added in L4.1

 $broadcast = $broadcast->with('homeClub')->whereHas('homeClub', function($query) use ($parameterValues){ 
       $query->where('abb', $parameterValues['club_abbs']); 
      }); 
      $broadcast = $broadcast->with('awayClub')->orWhereHas('awayClub', function($query) use ($parameterValues){ 
       $query->where('abb', $parameterValues['club_abbs']); 
      }); 

但這似乎只是取消了對在提到本賽季的約束我第一個例子。就像通過鏈接orWhereHas,我的方法「忘記」了他們所約束的東西。

任何幫助,非常感謝 - 謝謝

喬恩。

回答

9

我錯誤地使用了該方法。我先加載了兩個關聯,然後鏈接了whereHasorWhereHas

$broadcast = $broadcast->with('homeClub'); 
$broadcast = $broadcast->with('awayClub'); 


    $broadcast = $broadcast->whereHas('homeClub', function($query) use ($parameterValues){ 
     $query->where('abb', 'liverpool'); 
    })->orWhereHas('awayClub', function($query) use ($parameterValues){ 
     $query->where('abb', 'liverpool'); 
    });