Паравинация Laravel с отношением - PullRequest
1 голос
/ 11 мая 2019

Это код, который у меня есть:

public function divisions(Request $request)
{
    $q = $request->get('q');

    return Division::where('name', 'like', "%$q%")
            ->with(['nation' => function($query) {
                $query->select('id', 'name');

            }])->simplePaginate();
}

И вернуть следующее:

{
    "id": 1,
    "name": "1",
    "classify": 1,
    "nation_id": 1,
    "user_id": 1,
    "created_at": "2019-05-08 09:00:00",
    "updated_at": "2019-05-08 09:00:00",
    "nation": {
        "id": 1,
        "name": "France"
    }
}

Но мне нужно следующее.Что я могу сделать, чтобы вернуть только следующее?

{
    "id": 1,
    "name": "1",
    "nation": "France"
}

Спасибо

Ответы [ 2 ]

1 голос
/ 11 мая 2019

Попробуйте приведенный ниже ответ. Думаю, это поможет вам решить вашу проблему.

Решение 1:

public function divisions(Request $request)
{
    $string = $request->get('q');
    $builder = new Division;
    $builder->where('name', LIKE, "%$string%")
            ->with(['nation' => function($query) {
                $query->select('id', 'name');
            }]);

    $result = $builder->selectRaw("id, name, nation.name as nation")->simplePaginate();

    return response()->json($result);
}

Раствор 2

В контроллере

public function divisions(Request $request)
{
    $string = $request->get('q');
    $builder = new Division;
    $builder->where('name', LIKE, "%$string%")
            ->with(['nation' => function($query) {
                $query->select('id', 'name');
            }]);

    $paginator = $builder->paginate();

    $data = fractal()
                ->collection($paginator->getCollection(), new DivisionsTransformer, 'divisions')
                ->serializeWith(new DataArraySerializer())
                ->paginateWith(new IlluminatePaginatorAdapter($paginator))
                ->toArray();
}

DivisionsTransformers

public function transform($resource)
{
    return [
        'id' => $resource->id,
        'name' => $resource->name,
        'nation' => $resource->nation->name,

    ];
}

Вот ссылка на библиотеку трансформаторов. https://github.com/spatie/laravel-fractal

1 голос
/ 11 мая 2019

Если вы используете его для создания API, вы можете использовать Eloquent API Resources , поэтому можете использовать его следующим образом:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'nation' => $this->nation->name,
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...