2016-05-14 27 views
0

Tabellen:Laravel Eloquent Beziehung gibt nur minimale Ergebnisse

Posts 
id | console_id | game_id | etc 

Games 
id | name 

Console 
id | name 

Jetzt, als ich diese Beziehung bin Abfrage ich ständig den „Trying Eigenschaft Nicht-Objekts zu erhalten“ bin immer Fehler. Nun, wenn ich meine Ergebnisse auf die Top 3 (das ist alles, was ich habe in der Spieltabelle) zu begrenzen, dann wird es aber etwas mehr als, dass es die Ausnahme werfen wird ... ist die Beziehung falsch?

Beziehungen:

Game 
public function Post() 
{ 
    return $this->belongsTo('App\Post', 'game_id'); 
} 

Post 
public function console() 
{ 
    return $this->hasOne('App\Console', 'id'); 
} 

public function games() 
{ 
    return $this->hasOne('App\Game', 'id'); 
} 

Console 
public function Post() 
{ 
    return $this->belongsTo('App\Post', 'console_id'); 
} 

aktualisieren

@ Joel @rashmi Also eigentlich die $ post Dumping ich diese auf meinem vierten Eintrag sehe ... es wird NULL zurückkehr

["relations":protected]=> 
    array(2) { 
    ["games"]=> 
    NULL 

Die ersten 3 Rückgabewerte. Aber dann, am vierten, geben alle NULL's zurück. Ich habe wieder nur drei Werte in der Spiele-Tabelle

Games Table: 
1 | game 1 
2 | game 2 
3 | game 3 

Und tatsächlich auf dem dritten Eintrag es einen Wert von 2 hat aber zeigt Spiel 3 Name

posts table: 
id | game id 
1 | 2 
2 | 3 
3 | 2 (but showing "game 1" text) 

Antwort

1

wie Ihre Beiträge Looks gehören jeweils zu einer Konsole und ein Spiel - nicht umgekehrt. Und hasOne bedeutet, dass es immer nur eins geben kann, aber jede Konsole und jedes Spiel kann viele Beiträge haben. So sollte es so aussehen:

// Game 
public function posts() 
{ 
    return $this->hasMany('App\Post'); 
} 

// Post 
public function console() 
{ 
    return $this->belongsTo('App\Console'); 
} 

public function game() 
{ 
    return $this->belongsTo('App\Game'); 
} 

// Console 
public function posts() 
{ 
    return $this->hasMany('App\Post'); 
} 

Wenn Ihre Tabellen Konsolen genannt, Spiele und Beiträge bzw., dann müssen Sie nicht die IDs liefern, so dass ich sie entfernt. Sie können sie einfach neu hinzufügen, wenn Sie müssen.

+0

ja wurde das Hinzufügen nur die spezifischen Namen alle anderen Probleme zu vermeiden. Also habe ich den Schalter und jetzt läuft in „Der Versuch, Eigentum von Nicht-Objekt zu erhalten“ in meinem postTransformer: ‚Spiel‘ => $ post-> Spiele-> name, Das Objekt Spiele zurückgegeben wird allerdings ist ... – Citti

0

Es scheint, dass Ihre Beziehungen nicht richtig sind. Es sollte so aussehen:

// Game Model 
public function posts() 
{ 
    return $this->hasMany('App\Post'); 
} 

// Post Model 
public function console() 
{ 
    return $this->belongsTo('App\Console'); 
} 

public function game() 
{ 
    return $this->belongsTo('App\Game'); 
} 

// Console Model 
public function posts() 
{ 
    return $this->hasMany('App\Post'); 
} 

Und Ihre Eloquent Abfrage für Post wird:

$this->model->select(SELECTED_FIELDS) 
      ->with(array('game','console')) 
      ->get(); 

wo SELECTED_FIELDS Tabellenfelder bedeutet, dass Sie holen wollen.

+0

Also habe ich den Schalter und jetzt läuft in „den Versuch, Eigentum von nicht-Objekt zu erhalten“ in meinem postTransformer: ‚Spiel‘ => $ post-> Spiele-> Name, Das Objekt zurückgegeben wird, ist Spiele, obwohl ... – Citti

Verwandte Themen