0

我有一张桌子:

Events
Cities
Clubs

关系如下:

  • 一个Event'hasOne'Club和一个Club'hasMany' Event
  • 一个Club'hasOne'City和一个City'hasMany' Club

我想在我的查询中添加一个过滤器,以获取club.city == 'Oklahoma'. 这是我尝试过的:

$events = Event::where( 'accepted', 1 )
                ->with( [ 'club.city', 'organisation' ] )
                ->where( 'club.city.name', 'Rotterdam' )
                ->orderBy( 'created_at', 'asc' )
                ->paginate( 6 );
4

1 回答 1

1

您可以使用whereHas根据关系上是否存在条件进行过滤。

$events = Event::where( 'accepted', 1 )
    ->with( [ 'club.city', 'organisation' ] )
    ->whereHas('club.city', function ($q) use ($cityname) {
        $query->where('name', $cityname);
    })->orderBy( 'created_at', 'asc' )
    ->paginate( 6 );
于 2015-12-29T03:01:17.807 回答