Как объединить 2 функции в одной модели при вызове его в контроллер? - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в Laravel Framework.Я просто хочу знать, как связать две области из моей модели Match, вот две области:

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

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

вот мой контроллер, который возвращает идентификатор лиги таблицы лиг:

public function showDotaMatches($ptr){   
    $_matches = \App\Match::mainMatches()
                            ->whereNotIn('status',['ongoing','open'])
                            ->get()
                            ->load('league','teamA', 'teamB')
                            ->where('league_id','1')
                            ->sortByDesc('schedule')
                            ->slice($ptr, 10);

то, что я хочу сделать, это

public function showDotaMatches($ptr,$request){
    $_matches = \App\Match::mainMatches()
                            ->dotaMatches($request-type)
                            ->where('leagues.type','dota2') // instead of ('league_id','1')

, чтобы сделать код чистым.но когда я связал две эти области, он говорит о нарушении ограничения SQL, поскольку таблица соответствия и таблица лиг имеют статус и тип.Кто-нибудь, кто может помочь мне с этим?

1 Ответ

0 голосов
/ 03 декабря 2018

Я думаю, что вы после whereHas запроса:

// Retrieve all matches with at least one league with the type 'dota2'
$matches = App\Match::whereHas('leagues', function ($query) {
    $query->where('type', 'dota2');
})->get();

Тогда вам не понадобится ваше объединение в scopeDotaMatches.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...