我有产品和价格表(Temporal Data)。 获得特定产品最新价格的最佳方法是什么? 这是我的两个表的基本结构:
public function prices()
{
return $this->hasMany('App\Price', 'product_id', 'id');
}
产品型号:
public function product()
{
return $this->belongsTo('App\Product', 'product_id');
}
价格模型:
$product->prices->sortByDesc('effective_datetime')->first()->amount
我目前正在使用此代码获取产品的最新价格:
public function scopeLatest($query)
{
return $query->sortBy('effective_datetime', 'desc')->first();
}
你可以想象,为了得到产品的最新价格,我必须在我的应用程序中调用这条长线。有更好的方法吗?
我的想法是在我的Price模型上创建一个queryScope,如下所示:
$product->prices->latest()->amount
并致电
currentLocation
但是laravel正在抛出错误“调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: latest()”
答案 0 :(得分:2)
为了将范围应用于关系,您必须在关系的方法(而不是其动态属性)上调用它们以允许查询链接。试试这个:
dataWithJSONObject:
(最初评论)
答案 1 :(得分:1)
在您的情况下,拥有一个访问者是理想的:
public function getPrice()
{
$this->prices()->sortBy('effective_datetime', 'desc')->first()->amount;
}
现在您可以像$product->price
一样使用它。