Laravel模型范围activated_at和deactivated_at检查是否有7天的差异

时间:2016-02-04 09:28:28

标签: php laravel model scope eloquent

使用模型范围:

public function scopeApproved($query)
{
    return $query->where('activated_at', '>=', 'deactivated_at' -7 days);
}

我知道这是无效的语法,但我认为可能很清楚我想要实现的目标。

'activated_at'和'deactivated_at'是同一个表中的两个字段我希望获得距离超过7天的所有实例

2 个答案:

答案 0 :(得分:3)

Shempigon答案几乎是正确的,它只有一个问题,你不要在单引号中包装列名,而且日期也必须切换,如下所示:

public function scopeApproved($query) {
    $query->whereRaw("DATEDIFF(deactivated_at, activated_at) >= 7");
}

这是因为需要此输入:DATEDIFF(endDate, starDate),您可以阅读有关DATEDIFF here的更多信息

答案 1 :(得分:2)

虽然你可以使用MySQL函数DATEDIFF,但我不确定是否有通过Eloquent实现此目的的正确方法。尝试类似:

// in your model
public function scopeApproved($query) {
    $query->whereRaw("DATEDIFF('activated_at','deactivated_at') >= 7");
}

这取决于您使用的数据库驱动程序(即MySQL,SQLite,SQL服务器......)

修改

找到了与MySQL一起工作的其他东西:到目前为止:

// in your model
public function scopeApproved($query) {
    $query->whereRaw("TO_DAYS(activated_at) - TO_DAYS(deactivated_at) >= 7");
}

TO_DAYS是MySQL函数的构建。