Пагинация с отношениями - PullRequest
       7

Пагинация с отношениями

0 голосов
/ 07 февраля 2019

У меня проблемы с возвратом данных для двух отношений при использовании paginate.

$things = $this->model->with('fruits')->with('animals')->paginate(5, ['id, 'name']);

Возвращает нужные мне "вещи", но массивы "fruits" и "animal" пусты.

Чтобы уточнить, отношения выясняются, у вещей "есть много" фруктов, а также "есть много сквозных (фруктов)" животных.

public function fruits()
{
    return $this->hasMany('App\Fruit');
}

public function animals()
{
    return $this->hasManyThrough('\App\Animal', '\App\Fruit');
}

Я хотел бы иметь возможность загружать "вещи "вместе с любыми отношениями, в то же время будучи в состоянии разбить на страницы" вещи "

1 Ответ

0 голосов
/ 07 февраля 2019

with() только указывает Eloquent на предварительную выборку связанных моделей, поэтому вы можете избежать проблемы запроса N + 1.Это не означает, что когда вы возвращаете модель, эта информация также возвращается.

Я бы создал Eloquent Resource:

Class FruitResource extends \Illuminate\Http\Resources\Json\Resource {
    public function toArray($request) {
        return [
            'id' => $this->id,
            'name' => $this->name
        ];
    }
}


Class AnimalResource extends \Illuminate\Http\Resources\Json\Resource {
    public function toArray($request) {
        return [
            'id' => $this->id,
            'name' => $this->name
        ];
    }
}

Class ThingResource extends \Illuminate\Http\Resources\Json\Resource {
    public function toArray($request) {         
        return [
            'id' => $this->id,
            'fruits' => FruitResource::collection($this->fruits),
            'animals' => AnimalResource::collection($this->animals)
        ];
    }
}

Как только вы создали эти ресурсы, вы можете изменить свой контроллерсделать следующее:

$things = $this->model->with('fruits')->with('animals')->paginate(5, ['id, 'name']);
return ThingsResource::make($things);

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

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