Laravel的范围存在困难

时间:2018-12-21 17:04:13

标签: laravel scope

我正在尝试构建一个具有过期日期的设备的应用程序: 必须使用其他2个表中的值创建过期日期:历史记录(最后日期)和模型(间隔)

我已经在我的设备模型中创建了以下范围:

public function scopeExpiryDate($query, $operator) {
    if ($this->histories->last() != null) {
        $cal_date = $this->histories->sortBy('date')->last()->date;
        $interval = $this->product->interval;
        return $query->where($cal_date->addDays($interval), $operator, Carbon::now());
    }
    return $query;
}

然后我可以使用下一行:

$devices->ExpiryDate('<=')->get();

更新

就像@ceejayoz在评论中告诉我,我检查了Laravel网站上的范围部分。 我编辑了这个问题。

那我怎么使这个示波器起作用?

2 个答案:

答案 0 :(得分:0)

假设$cal_date是一个Carbon\Carbon实例,则可以使用以下查询:

$query->whereDate($cal_date->addDays($interval), $operator, Carbon::now());

有关更多信息,请参见有关日期过滤here

的精彩教程

答案 1 :(得分:0)

好的,我找到了解决方案。在作用域中找不到它,但是在添加属性时没有找到它。 我在“设备”模型中做了以下操作:

public function getExpirydateAttribute() {
    if ($this->histories->last() != null) {
        $cal_date = $this->histories->sortBy('date')->last()->date;
        $interval = $this->product->interval;
        return $cal_date->addDays($interval);
    }
    return Carbon::now();
}

在我看来,我可以这样称呼:

$devices->filter(function($item){ return $item->Expirydate > now()->modify('last day of this month'); })->count()

感谢回答我问题的人。