Сценарий с адресом пользователя Laravel — имеет множество

#laravel #eloquent #laravel-8

Вопрос:

Таблица пользователей ( users ):

  • ID
  • Имя
  • Пароль

Таблица адресов пользователей ( user_addreses ):

  • ID
  • идентификатор пользователя
  • city_id

Таблица городов ( cities ):

  • ID
  • Имя

Модель пользователя:

 public function address() {
    return $this->hasMany('AppModelsUserAddreses');
}
 

Как я могу узнать город по этому адресу из cities таблицы?

UserAddreses Модель:

 public function city() {
    return $this->belongsTo(City::class);
}
 

Ошибка: Свойство [город] не существует в этом экземпляре коллекции.

Команда, которую мне нужно выполнить:

 $user = User::find(Auth::user()->id);
dd($user->address->city);
 

Комментарии:

1. У пользователей много адресов. Следовательно $user->address , это будет набор адресов. Вам нужно пройтись по адресам. Вы могли бы это сделать $user->address->city , если бы у пользователей было по одному адресу у каждого.

Ответ №1:

Ваша ошибка заключается в том , что $user->address возвращает a collection , поэтому вам нужно повторять каждую из них, чтобы получить ->city

 $cities = $user->address->map(function (Address $address) {
    return $address->city;
});