Laravel - 查询数据库表上最新日期的优雅方式

时间:2015-08-22 07:28:43

标签: php mysql laravel laravel-5

我有产品和价格表(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()”

2 个答案:

答案 0 :(得分:2)

为了将范围应用于关系,您必须在关系的方法(而不是其动态属性)上调用它们以允许查询链接。试试这个:

dataWithJSONObject:

(最初评论)

答案 1 :(得分:1)

在您的情况下,拥有一个访问者是理想的:

public function getPrice()
{
    $this->prices()->sortBy('effective_datetime', 'desc')->first()->amount;
}

现在您可以像$product->price一样使用它。