Laravel hasOne получает только одно поле вместо объекта - PullRequest
0 голосов
/ 09 января 2020

Есть две модели user, а также address, которая содержит страну, город и т. Д. c. Мне нужно получить список пользователей с городом, а не со всем адресом. Отношение oneToOne. Единственное, что я могу получить, используя select['user_id', 'city']:

{
  "id": 1,
  "name": "John",
  "city": {
  "user_id": 3,
  "city": "Paris"
},

, но мне нужно:

{
  "id": 1,
  "name": "John",
  "city": "Paris"
}

Конечно, я могу использовать al oop и сделать что-то вроде $user->city = $user->address->city но может быть есть лучший способ решить эту проблему. Laravel 5,4

1 Ответ

2 голосов
/ 09 января 2020

Вы можете использовать Accessor ,

и добавить атрибут к json добавление значений к json:

В вашей пользовательской модели:

    protected $appends = ['city'];

    public function getCityAttribute()
    {
        return $this->city->city;
    }

Проверьте это так:

User::with('city')->get()->toJson();
// It will return:
// [{"id": 1, "name": "John", "city": "Paris", "city" : {"user_id": 3, "city": "Paris"}}, {...}]
...