как использовать take () с каждым индексом массива в laravel - PullRequest
0 голосов
/ 18 января 2019

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

 $brand = Brand::with (['models' => function ($q){
            $q->take(3);
    }])->get()->toArray();

Но для первой марки нужно не только 3 модели, а не для всех Вот изображение моей команды dd Так скажите мне, как собрать 3 модели для всех брендов.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

В Laravel нет родной поддержки для этого.

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

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

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

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

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

0 голосов
/ 18 января 2019

Я нашел одно решение после использования карты метода сбора, вы можете получить 3 модели для всех марок

  $feed= Brand::with(['models'])->get()->map(function ($query) {
        $query->setRelation('models', $query->models->take(3));
        return $query;
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...