2016-07-15 40 views
0

Ich habe Beziehung in meinem Chat-ModellLaravel 5.2 Eloquent hasOne Beziehung funktioniert nicht

public function user() { 
    return $this->hasOne(User::class,'id','writers_id'); 
} 

Und möchte es in meinem Controller verwenden. Ich habe viele Wege versucht, aber niemand hat gearbeitet. Geben Sie nur letzten Versuch Beispiel (Ergebnis - leere Seite).

print_r($chat = Chat::where('id', 1)->first()->user); 

Kann mir jemand helfen? Vielen Dank! Ich verstehe nicht wirklich, dass Eloquent, einfache DB Query Maker vor, aber jemand sagte, dass ich jede Datenbank im Modell tun sollte. Ist es richtig? Entschuldigung für mein schlechtes Englisch!

+1

Überprüfen Sie die Reihenfolge der Parameter: '$ this-> hasOne ('App \ Modelname', 'foreign_key', 'local_key')' – undefined

+0

id id in der Tabelle user, writers_id im Chat Tabelle ist, ist es richtig? – Danielius

+0

Ja, ist es. Tausche die 2 Parameter aus. – undefined

Antwort

0

Zuerst als von @Vohuman erwähnt

return $this->hasOne('App\User', 'id', 'writers_id'); 

Und wenn es mit:

Chat::where('id', 1)->first()->user()->first()->attribute 
+0

es funktioniert, aber jetzt bekomme ich nur user tabelle info:? – Danielius

+0

Wenn Sie es an eine Variable übergeben, können Sie tun, was Sie wollen. Wie '$ chat = Chat :: wo ('id', 1) -> zuerst()' dann $ chat-> attribute' oder '$ chat-> user() -> first() -> attribute' –

+0

danke ! Es klappt! – Danielius

0

Schauen Sie hier: https://laravel.com/docs/master/eloquent-relationships#one-to-one

In App\Chat.php:

public function writer() 
{ 
    return $this->hasOne('App\User','id','writers_id'); 
} 

um die Beziehung zu definieren. Dann in welcher Controller:

oben:

use App\User; 

und innerhalb der Methode:

$writer = User::find($user_id)->writer; 

debuggen es eine Zeile vor der Zeile oben hinzufügen.

dd($user_id,User::find($user_id),$writer); 
Verwandte Themen