Я столкнулся с небольшой проблемой, я пытаюсь получить свои данные о табличных адресах с пользователем.
В моих адресах БД у меня есть внешний ключ 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 вид
Хорошо, у вас есть пара ошибок. Во-первых, вам не нужно снова определять пользователя, потому что 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.
..........
}
В вашей таблице адрес удалите 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);