2016-04-12 40 views
1

我遇到了一个小问题,我尝试检索我与用户的表地址关系的数据。Laravel关系表用户和地址

在我的数据库地址中,我有一个与用户表ID关联的外键user_id。

我的车型用户

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

我的模型Addresse

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列并从Address表中删除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

在你的餐桌ADRESS删除USER_ID和表用户创建一个行名称ADDRESS_ID。

变化

型号用户:

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

此: $ ADRESS = $用户>地址:

对于这一点:

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