2016-07-16 2 views
0

У меня есть один стол ITEMS (sku, title) и другие ИСТОРИЯ (sku, points, startdate). Таблица ИСТОРИЯ служит историей для изменения пунктов пункта.Как присоединиться к ценности из связанной таблицы с коллекцией красноречивых материалов Laravel?

Я хотел бы присоединиться новые точки при вызове

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

Что является лучшим способом сделать это?

Я знаю, что я могу сделать пользовательский атрибут, но мне кажется, что тогда я слишком много запросов

Также я могу сделать соотношение (так как для каждого элемента он будет делать фильм запрос?):

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