加入2个作用域laravel

时间:2019-01-11 01:58:01

标签: laravel eloquent

我已经尝试解决这个问题已经有一段时间了。我想从我的匹配模型中加入这两个范围:

public function scopeMainMatches($query)
{
    return $query->where('type', 'main');
}

public function scopeDotaMatches($query)
{
    return $query->join('leagues', function ($join) {
        $join->on('matches.league_id', '=', 'leagues.id')
            ->select('matches.*')
            ->where('leagues.type', '=', 'dota2')
            ->where('matches.type', '=', 'main');
    });
}

所以基本上,当我加入有说服力的关系时,会是这样:

$query = DB::table('matches')
    ->join('leagues', 'leagues.id', '=', 'matches.league_id')
    ->select('matches.*')
    ->where('leagues.type', '=', 'dota2')
    ->get();

在终端检查期间工作正常。但我需要为Controller连接2个范围,如下所示:

$_matches = \App\Match::mainMatches()
    ->get()
    ->load('teamA', 'teamB')
    ->sortByDesc('schedule');

所以当我尝试连接mainMatches和dotaMatches时,它不会显示在比赛中。尽管当我运行php artisan tinker时,它会返回正确的输出,但不会显示在matchs表中。

$_matches = \App\Match::mainMatches()
    ->dotaMatches()
    ->get()
    ->load('teamA', 'teamB')
    ->sortByDesc('schedule');

任何想法如何解决? TYIA!

1 个答案:

答案 0 :(得分:0)

我已经设法在一个范围内联接了两个表,这里是代码:

 public function scopeMainMatches($query) {
    return $query->join('leagues','leagues.id','=','matches.league_id')->select('matches.*')->where('matches.type', 'main');
}