2016-04-12 1 views
1

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

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

Просмотреть profile.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 из таблицы адресов. Таким образом, вы будете иметь отношение «один к одному». У каждого пользователя будет только один адрес.

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

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. 

     .......... 
} 
+0

thx его отлично работает – nicolassiuol

+0

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

0

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

Изменить

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

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

Это: $ адрес = $ user-> адрес:

Для этого:

$address = $user->Address->address(name of the row with the address); 
Смежные вопросы