2016-03-23 10 views
1

Ich habe 2 Datenbanktabellen =>mobile_phones, mobile_usersLaravel One-to-One-Beziehung funktioniert nicht

Schema für mobile_phones

  • phone_id (Primärschlüssel, auto_increment)

  • phone_name (varchar (150))

  • phone_model (int (11))

Schema für mobile_users

  • User_id (Primärschlüssel, auto_increment)

  • Benutzername (VARCHAR (150))

  • mobile_phone_id (Fremdschlüssel Referenzierung mobile_phones (phone_id))

Modellklasse für mobile_phones

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class MobilePhone extends Model 
{ 
    protected $primaryKey = "phone_id"; 
    public $timestamps = false; 
    protected $table = "mobile_phones"; 
    protected $fillable = array("phone_name","phone_model"); 

    public function mobileUser() 
    { 
     return $this->hasOne("MobileUser","mobile_phone_id"); 
    } 

} 

Modellklasse für mobile_users

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class MobileUser extends Model 
{ 
    protected $primaryKey = "user_id"; 
    public $timestamps = false; 
    protected $table = "mobile_users"; 
    protected $fillable = array("username","mobile_phone_id"); 

    public function mobilePhone() 
    { 
     return $this->belongsTo("MobilePhone","phone_id"); 
    } 


} 

Ich versuche, Eins-zu-Eins-Beziehung zwischen MobileUser und MobilePhone Modelle zu schaffen, aber es ist nicht passiert. Im Folgenden finden Sie Aktion meinen Code in Kontrolleurs -

public function query() 
    { 
     $getUsername = MobilePhone::find(1)->username;   
     echo $getUsername; 
    } 

Der obige Code gibt NULL mich, wenn ich ein var_dump() tun habe ich auf SO ähnliche Fragen überprüfen und sie verwendet with() (aber das ist nicht notwendig). Ich beziehe mich auf Dokumente von Laravel 5.2 und sie geben an, dass wir in einer anderen Beziehung mit den dynamischen Eigenschaften von Eloquent auf relate-Datensätze zugreifen können. Link zu diesem Dokument ist here

Bitte Hilfe !!

+0

Es sieht aus wie mobile_users hat einen Fremdschlüssel zu Mobile_phones, aber nicht umgekehrt. Wenn Sie also auf den Benutzernamen zugreifen möchten, müssen Sie die MobileUser-Klasse und nicht die MobilePhone-Klasse verwenden. –

+0

Wenn ich die 'MobilePhone' Klasse nicht verwende und direkt die' MobileUser' Klasse verwende, dann war es nicht nötig die Beziehung zwischen den 2 Modellen zu definieren. Laut der Dokumentation führt 'MobilePhone :: find (1) -> username 'intern den Primärschlüssel - Foreign Key mapping aus und erhält den Benutzernamen, der ein Mobiltelefon mit der ID 1 hat. –

+0

Sie wollen Handy des jeweiligen Benutzers oder umgekehrt? – Drudge

Antwort

0

Etwas wie folgt aus:

public function query() 
    { 
     $getUsername = MobilePhone::find(1)->mobileUser;   
     echo $getUsername->username; 
    } 
+0

Nein. Funktioniert nicht . 'mobileusers' ist mit nichts verbunden. Meintest du "mobileUser"? –

+0

Ja, es sollte "mobileUser" sein, Tippfehler. – Drudge

0

Wenn dies zu tun:

public function query() 
    { 
     $getUsername = MobilePhone::find(1)->username;   
     echo $getUsername; 
    } 

Sie versuchen, eine username Eigenschaft zuzugreifen aus einer MobilePhone Zahl, die falsch ist.

Try this:

public function query() 
    { 
     $getUsername = MobilePhone::find(1)->mobileUser->username;   
     echo $getUsername; 
    } 

Auch möchte ich Sie ermutigen die with Anweisung verwenden, da es alle Abhängigkeiten Vorspannung benötigt (Mittel 1 einzelne Abfrage) anstelle von eifrigen Laden es (viele Anfragen)

+0

Versucht. Es heißt 'Call to undefined Methode MobileUser :: newQuery()' –

0

Sie müssen Sie die Funktion Ihres Modells so tun, die folgenden

public function query() 
{ 
     $getUsername = MobilePhone::find(1)->mobileusers;   
     echo $getUsername->username; 
} 
+0

Es sagt 'Versuch, die Eigenschaft von Nicht-Objekt zu bekommen, gefolgt von einem großen Fehler Stack-Trace. –

+0

Warum würde er '-> mobileusers 'anrufen, wenn die Modelleigenschaft' mobileUser 'ist (1 zu 1 rel) – kitensei