2016-05-11 16 views
1

Benutzer Tabelle: hat zone_id Feld darin.Laravel - Definieren der richtigen Beziehung

Zones-Tabelle: hat world_id Feld drin.

  • Jeder Benutzer in einer Zone sein kann, beispielsweise zone_id = 1

  • Jede Zone gehört zu einer Welt, zum Beispiel - world_id = 5

Meine gewünschte Ausgabe gibt Benutzerzone und Weltinfo zurück.

Dies ist, wie ich es ohne Beziehung Satz bilden kann:

$zone = Zone::find($user->zone_Id); 
$world = World::find($zone->world_id); 
$data = $user; 
$data['zone'] = $zone; 
$data['zone']['world'] = $world; 

Meine Frage ist .. Ich bin sicher, Beziehung für einen saubereren Code verwendet werden kann

, aber ich bin nicht sicher, wie zu setzen es auf.

  1. Sollte ich mit dem aktuellen Code bleiben oder eine Beziehung definieren?
  2. Wenn die Antwort für 1 ist eine Beziehung definieren, Irgendwelche Hilfe von was ist die richtige Beziehung zwischen diesen 3 Modellen?

Lösung 1:

`public function getZone(Request $request) 
    { 
     $token = $request->input('token'); 
     $user = JWTAuth::toUser($token); 
     // Simplest example using relationships 
     $userWithZone = User::with('zone.world')->find($user->id); // You'll get the `zone` relationship info here, too 
     return $userWithZone; 
    }` 

Fehler: returns "Call to a member function getQuery() on null"

Antwort

1

Hier ist ein Beispiel dafür, wie Sie dies mit Eloquent Beziehungen erreichen können.

// User.php 
class User 
{ 
    public function zone() 
    { 
     return $this->belongsTo(Zone::class); 
    } 
} 

// Zone.php 
class Zone 
{ 
    public function world() 
    { 
     return $this->belongsTo(World::class); 
    } 
} 

Einfachstes Beispiel unter Verwendung von Beziehungen

$user = User::with('zone.world')->find($id); // You'll get the `zone` relationship info here, too 

Sie können komplexere mit Ihren Beziehungen erhalten, wenn Sie wollen

$user = User::with(['zone' => function($query) { 
    $query->with('world') 
      ->select('id', 'zone_name', 'world_id'); 
})->select('username', 'zone_id')->find($id); 

oder sogar ...

$user = User::with(['zone' => function($query) { 
    $query->with(['world' => function($query2) { 
     $query2->select('id', 'world_name'); 
    }])->select('id', 'zone_name', 'world_id'); 
})->select('username', 'zone_id')->find($id); 

Ihre resultierende $user etwas aussehen wird:

'user' => [ // This is a Collection 
    'username', 
    'email', 
    'zone_id', 
    'zone' => [ // This is a Collection 
     'id', 
     'zone_name', 
     'world_id', 
     'world' => [ // This is a Collection 
      'id', 
      'world_name' 
     ] 
    ] 
]; 
+0

Ich habe einen Fehler aufgetreten erste Lösung, ich habe meine Frage mit der Info aktualisierte – TheUnreal

+0

mein Update sehen. Ich habe "Rückkehr" in den Beziehungen vermisst. – tptcat

+0

Ich bin mir nicht sicher, ob ich die Frage verstehe. Können Sie Ihre erste Frage aktualisieren? – tptcat