Laravel предельная нагрузка для каждой модели - PullRequest
0 голосов
/ 18 декабря 2018

С нашей моделью User мы стремимся загружать разговоры и сообщения этих разговоров.Из каждого разговора мы хотели бы вести последние 25 сообщений.Поэтому мы написали следующий запрос.

User::where('status', 3)->with(['conversations.messages' => function ($q) {
    $q->take(25)->orderBy('created_at', 'DESC');
}])->get();

Однако эта функция возвращает всего 25 сообщений (т.е. не за разговор).Даже если у вас 1000 пользователей, он загрузит последние 25 сообщений в таблицу сообщений, но не последние 25 сообщений за разговор пользователя.

Есть ли способ решить эту проблему в методологии Laravel Eloquent?

1 Ответ

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

В Laravel нет собственной поддержки.

Я создал для него пакет: https://github.com/staudenmeir/eloquent-eager-limit

Используйте черту HasEagerLimit как в родительской, так и в связанной модели.

class Conversation extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

class Message extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

Тогда вы можете применить ->take(25) к вашим отношениям.

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