2016-04-12 14 views
1

Ich bin mit einem kleinen Problem konfrontiert, ich versuche, meine Daten der Tabelle Adresse Beziehung mit dem Benutzer abrufen.Laravel Relation Tabelle Benutzer und Adresse

In meinen DB-Adressen habe ich einen Fremdschlüssel user_id mit der Benutzer-Tabellen-ID verknüpft.

Meine Modelle Benutzer

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

Mein Modell Addresse

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

Ich versuche in meinem Userscontroller abzurufen Ich versuche, die Adresse des Benutzers Controller-Benutzer in meinem Profil Methode zeigen

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)); 
} 

Aber aus meiner Sicht kann ich die Daten meines Verwandten nicht abrufen Benutzeradresse

profile.blade.php Ansicht

Antwort

1

Ok Sie haben paar Fehler . Zuerst müssen Sie den Benutzer nicht erneut definieren, da Auth :: user() bereits Ihr Benutzermodell ist. Sie müssen also nur $ user = Auth :: user();

und danach

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; 

     .......... 
} 

Wenn Ihr Ziel ist für jeden Benutzer einen einzelnen Adressdatensatz wird mit dann sollten Sie einige Änderungen auf Ihren Modellen.

Fügen Sie in Ihrem Benutzermodell einfach eine Spalte address_id hinzu und entfernen Sie die Spalte user_id aus der Adresstabelle. Auf diese Weise haben Sie eine Eins-zu-eins-Beziehung. Jeder Benutzer hat nur eine Adresse.

danach in Ihrem Benutzermodell entfernen Adressen() Funktion und fügen Sie Adresse (Singular) Funktion

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

und in Ihrem Adressbuch Modell

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

wird dir geben, was Sie brauchen. dann in Ihrem Controller-Klasse

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

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

thx seine große – nicolassiuol

+0

Kühle Arbeiten, ich bin froh, löste es Ihr Problem. Ich werde es zu schätzen wissen, wenn Sie es als richtige Antwort markieren können. Vielen Dank. –

0

In Ihrer Tabelle Adresse löschen user_id und in der Tabelle Benutzer eine Zeile Namen address_id erstellen.

ändern

Modell Benutzer:

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

Diese: $ mail = $ user-> Adresse:

Dazu:

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