Laravel, где есть отношение ManyToMany, но затем порядок по значению в третьей таблице - PullRequest
2 голосов
/ 22 апреля 2019

у меня 3 стола

entry (
id,
title,
other_stuff)

entry_award (
id,
award_id,
entry_id)

award (
id,
name,
type)

Я пытаюсь создать запрос laravel, который позволяет мне получить все записи, которые имеют награды, и упорядочить их по награде. Тип ASC

$Entries = Entry::with('award')
    ->whereHas('award', function ($query) {
        $query->orderBy('award.award_id','ASC');
    })->paginate(20);

Но это не работает.

Это версия sql

SELECT DISTINCT entry.*
FROM entry, award, entry_award
WHERE entry.id = entry_award.entry_id
AND award.id = entry_award.award_id
ORDER BY award.type ASC;

Теперь я попытался просто использовать для этого raw sql, но проблема, похоже, в том, что laravel не распознает результат как модели / объекты Entry. И мне нужно получить другие входные отношения позже в html через блейд.

Итак, как мне сделать запрос построителя запросов, который получит все записи, которые имеют награды, и упорядочит их по значениюward.type

или используйте сырой sql, но Laravel увидит его как массив Entry объекты, а не просто массив значений JSON.

class Entry extends Model {

    public function entry_award(){
        return $this->belongsToMany('App\Award', 'entry_award');
    }
}

class Award extends Model {

    public function entries() {
        return $this->belongsToMany('App\Entry', 'entry_award');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...