Таблица отношений пользователя и адрес Laravel

Я столкнулся с небольшой проблемой, я пытаюсь получить свои данные о табличных адресах с пользователем.

В моих адресах БД у меня есть внешний ключ user_id, связанный с идентификатором таблицы пользователей.

Мои модели Пользователь

public function addresses()
{
return $this->belongsToMany('Address');
}

Моя модель Адрес

public function user(){
return $this->hasOne('User');
}

Я пытаюсь получить в моем UsersController Я пытаюсь показать в своем профиле метод адрес пользователя
Пользователи контроллера

 public function profile($id){
if($id != Auth::user()->id){
return Redirect::to('logout');
}
$user=User::find(Auth::user()->id);
$address = $user->addresse;
dd($address);
$comments = Comment::where('user_id','=',Auth::user()->id)
->take(10)->get();

return View::make('users.profile')
->with(array('comments'=>$comments,'address'=>$address));
}

Но, на мой взгляд, я не могу получить данные моего отношения пользователя адрес.

профиль.blade.php вид

1

Решение

Хорошо, у вас есть пара ошибок. Во-первых, вам не нужно снова определять пользователя, потому что Auth :: user () уже является вашей моделью пользователя. Так что все, что вам нужно сделать, это
$ user = Auth :: user ();

и после этого

 public function profil($id){
......
$user=Auth::user();
// this will bring users all related addresses as an array.
//so you can loop through and use them.

$adress = $user->adresses;

..........
}

Если вашей целью является создание единой адресной записи для каждого пользователя, вам следует внести некоторые изменения в свои модели.

В вашей пользовательской модели просто добавьте столбец address_id и удалите столбец user_id из таблицы адресов. Таким образом, вы будете иметь отношение один к одному. У каждого пользователя будет только один адрес.

после этого в вашей пользовательской модели удалите функцию address () и добавьте адресную (единственную) функцию

 public function address(){
return $this->belongsTo("Address");
}

и в вашей модели адреса

 public function user(){
return $this->hasOne("User");
}

даст вам то, что вам нужно. тогда в вашем классе контроллера

 public function profil($id){
......
$user=Auth::user();
$adress = $user->adress;
// will give you a single address record belongs to user.

..........
}
1

Другие решения

В вашей таблице адрес удалите user_id, а в таблице user создайте имя строки address_id.

+ Изменить

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

public function addresses()
{
return $this>belongsToMany('address_id','Address');
}

Это:
$ адрес = $ пользователь-> адрес:

За это:

$address = $user->Address->address(name of the row with the address);
0

По вопросам рекламы [email protected]