2016-07-16 17 views
0

我有一个表ITEMS(SKU,标题)和其他历史(SKU,点,startdate)。 表历史可用作项目点更改的历史记录。如何将相关表中的值加入Laravel雄辩的集合?

我想加入最新的点叫

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

哪家做最好的办法是什么时候?

我知道我可以做自定义属性,但似乎然后我有太多的疑问

而且我可以让关系(因为每个项目就会使aditional的查询?):

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

但是有更好的方法吗? br Y

回答

2

既然你只想要最新的记录,最好的选择是你已经显示的hasOne关系。这样,关系可以被加载,所以你只需要调用2个查询,而不是N + 1个查询。

关系:

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(); 
    } 
}