Laravel отношения стремятся к загрузке, ограничивая все результаты вместо конкретной модели - PullRequest
0 голосов
/ 24 марта 2020

У меня есть вложенные отношения, такие как:

Model One имеет много Model Twos, у которого много Model Threes.

Цель состоит в том, чтобы получить все Model Ones и все их Model Twos и для каждого из Model Twos получите только самые последние Model Three.

Я пробовал:

return ModelOne::with(['modelTwos.latestModelThree'])
    ->paginate();

Но это только дает Model Three для последнего Model Two из последних Model One.

Все остальные Model Twos не имеют Model Three в ответе.

Метод для latestModelThree в классе Model Two:

public function latestModelThree()
    {
        return $this->hasMany(ModelThree::class)
            ->latest()
            ->limit(1);
    }

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Изменение отношения larestModelThree() на hasOne() и снятие лимита должно помочь:

public function latestModelThree()
    {
        return $this->hasOne(ModelThree::class)
            ->latest();
    }

Это немного странно, и не решайте проблему, если вам нужно N элементов этого отношения вместо одного, но решает вашу проблему.

0 голосов
/ 26 марта 2020

Ответ от Elias Soares работает, но вызывает большие проблемы с производительностью для больших наборов данных.

Более эффективное решение - использовать этот пакет: https://github.com/staudenmeir/eloquent-eager-limit

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