2016-07-16 21 views
0

Ich habe eine Tabelle ITEMS (SKU, Titel) und andere GESCHICHTE (SKU, Punkte, Startdatum). Die Tabelle HISTORY dient als Historie für die Änderung von Postenpunkten.Wie man Wert von in Verbindung stehender Tabelle Laravel eloquenter Ansammlung beifügt?

Ich möchte letzte Punkte verbinden, wenn

$items = \App\Items::all(); 

Aufruf Welche beste Weg, es zu tun ist?

ich weiß, ich benutzerdefinierte Attribute machen kann, aber es scheint, dass dann auch ich habe viele Anfragen

Auch kann ich Relation machen (da für jedes Element wird es aditional Abfrage machen?):

public function points() 
    { 
     return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC'); 
    } 

Aber gibt es einen besseren Weg? br Y

Antwort

2

Da Sie nur den neuesten Datensatz möchten, ist die beste Option die hasOne Beziehung, die Sie gezeigt haben. Auf diese Weise kann die Beziehung geladen werden, sodass Sie nur 2 Abfragen anstelle von N + 1 Abfragen aufrufen.

Beziehung:

public function currentPoints() 
{ 
    return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC'); 
} 

Verbrauch:

$items = \App\Items::with('currentPoints')->get(); 
0

Zum Beispiel:

class Items extends Model 
{ 
    protected $primaryKey = 'sku'; 

    public function points() 
    { 
     return $this->hasOne('App\History','sku','sku')->orderBy('startdate','DESC'); 
    } 


    public function getItems(){ 
     $items = \App\Items::with('points')->get(); 
    } 
}