Как сделать ализе связи в laravel? - PullRequest
0 голосов
/ 01 мая 2020

Мой код:

     $this->model
        ->whereId($id)
        ->with('userRegion.region')
        ->first();

Ответ:

    "id": xx,
    "first_name": "sahil",
    "last_name": "gupta",
    "email": "xxxx@yopmail.com",
    "role_id": 0,
    "user_region":[] 

Но я хочу переименовать или создать псевдоним user_region как regions, и тогда он должен выглядеть следующим образом :

        "id": xx,
        "first_name": "sahil",
        "last_name": "gupta",
        "email": "xxxx@yopmail.com",
        "role_id": 0,
        "regions":[] 

Я пытался:

      $this->model
        ->whereId($id)
        ->with('userRegion.region as regions')
        ->first();

Или

       $this->model
            ->whereId($id)
            ->with(['userRegion as regions','userRegion.region'])
            ->first();

Но оба решения не работают и выдают ошибки.

1 Ответ

1 голос
/ 01 мая 2020

Если вы хотите использовать отношение с именем regions, просто определите имя метода отношения как regions:

public function regions() {
    return $this->hasMany(...);
}

, чтобы вы могли использовать $this->model->whereId($id)->with('regions.region'). и ответ будет:

        "id": xx,
        "first_name": "sahil",
        "last_name": "gupta",
        "email": "xxxx@yopmail.com",
        "role_id": 0,
        "regions":[....] 

И вы можете сохранить исходный метод отношений userRegion, чтобы вы все равно могли использовать with('userRegions.region') в других случаях. и метод регионов вызывает метод отношения:

public function regions() {
    return $this->userRegion();
}

Другое решение:

Сброс userRegions до regions на Ресурсы API

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