Я храню несколько записей адресов, принадлежащих пользователю. но когда я пишу с помощью dd, я не могу получить доступ к данным другой таблицы.
Следуя моему коду:
user
Таблица
id | name | country |
--- -------------- ----------
7 | Mr. Lenny Bins| Belgium
2 | Dalton Miller | Swaziland
address
Таблица
user_id | address
-------- ---------
7 | 740 Brown Greens Suite
7 | 9906 Cleora Wall Apt.
2 | 53977 Kip Center Apt
UserModel
public function getAddress()
{
return $this->hasMany(Address::class);
}
UserController
$users = User::where('id' ,7)->with('getAddress')->get();
dd($users->toArray());
// The output of this is below
dd($users->getAddress->toArray());
Я получаю сообщение об ошибке, когда я пытаюсь сделать это.
Свойство [getAddress] не существует в этом экземпляре коллекции.
$users = User::with('getAddress')->where('id',7)->first();
дд ($ пользователей);
Ну, вы вытягиваете пользователей, а не адреса, поэтому у вас есть пользователь с отношением getAddress. Вы можете использовать select getAddress.* или просто запросить адрес, где есть пользователь с идентификатором 7.
Во-первых, вы используете get, который вернет коллекцию. Далее вы получите всех пользователей с их адресами.
$users = User::where('id' ,7)->with('getAddress')->get();
Вы можете использовать first()
вместо get()
, так как вы находите только одного пользователя.
$user = User::where('id' ,7)->with('getAddress')->first();
Если вам нужен только адрес этого пользователя, используйте
dd($user->getAddress)
Или если вы хотите только в форме использования массива
dd($user->getAddress->toArray())
Модель пользователя
public function getAddress()
{
return $this->hasMany('App\Address');
}
Получить пользователей
$users = \App\User::with('getAddress')->where('id' ,7)->get();
Итерация и чтение данных
foreach ($users as $user) {
echo '<pre>' , var_dump($user->getAddress()->first()['address']) , '</pre>';
}
Я понимаю, а как тянуть только адреса?