WhereHas()/或者没有按预期约束查询

时间:2014-01-14 15:02:21

标签: laravel laravel-4

我正在使用新的whereHas方法在Laravel 4.1中为急切加载的关系添加约束。

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

在这个例子中,我正在寻找一个足球/足球广播,其关系是广播belongsTo一季

我想为团队(俱乐部)添加约束,其中关系是广播hasOne homeClub和广播hasOne awayClub。我想要一个团队(利物浦)是主场或客场俱乐部的结果,所以我尝试使用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,我的where方法已经“忘记”了他们所约束的内容。

任何帮助,非常感谢 - 谢谢

乔恩。

1 个答案:

答案 0 :(得分:13)

我使用的方法不正确。我先加载了两个关联,然后将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' );
  });