Как загрузить Laravel с вложенными моделями и ограничить количество вложенных моделей? - PullRequest
0 голосов
/ 28 мая 2018

Привет, ребята, я использую Laravel 5.6 У меня есть три таблицы в базе данных сообщений, комментариев и ответов и три модели Post, Comment, Reply

отношения следующие: одно сообщение имеет много комментариев и один комментарий имеетмного ответов.Я создал маршрут, который при попадании вернет некоторые данные, однако я хочу, чтобы эти данные были определенным образом, прочитайте этот пример:

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

//this is a function inside a controller 
//and for sure I have make sure to make use of the models namespaces 

public function test(){
    $posts = Post::with(['comments' => function($data){
        return $data->take(3);
    },
    'comments.replies' => function($data){
        return $data->take(3);
    }])->paginate(3);

    //returning the posts
    return $posts
}

.и он возвращает первые 3 комментария и первые 3 ответа только для первого сообщения, но для других сообщений я получаю только пустой ключ комментариев, поэтому в результате нет ответов

надеюсь, вы получите мой вопрос, пожалуйста, помогите извинитеЗа большой вопрос Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

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

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

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

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

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

Затем вы можете применить ->take(3) к вашим отношениям.

То же самое относится и к ответам.

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