2016-04-12 66 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);