2016-07-16 11 views
0

私はテーブルITEMS(sku、title)と他の歴史(sku、points、startdate)を持っています。 テーブルヒストリーは、アイテムポイントの変更の履歴として機能します。それを行うための最善の方法がある関連テーブルの値をLaravel eloquentコレクションに結合するにはどうすればよいですか?

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

を呼び出すときに

私は、最新のポイントに参加したいと思いますか?

私は私がカスタム属性を作ることができます知っているが、私はあまりにも多くのクエリを持っているようだ

また私が作ることができる関係(各項目について、それはaditionalクエリを行いますので、?):

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

しかし、良い方法はありますか? br Y

答えて

2

最新のレコードのみが必要なので、最も適切な選択肢は、表示されているhasOneの関係です。そうすれば、関係が熱心に読み込まれるので、N + 1個のクエリの代わりに2個のクエリだけを呼び出すことになります。

関係:

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

使用:例えば

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

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(); 
    } 
} 
関連する問題