如何使用eloquent检查查询中的列是否为空?

时间:2017-05-01 04:34:32

标签: php mysql laravel

我正在尝试删除过去30天内未查看过的所有条目,这些条目是在30多天前创建的。

last_viewed_at的默认值为null,因此,如果条目在5天之前为created_at且未被查看,则该行不应被删除。

我目前正在使用

$medias = Media::where('last_viewed_at', '<=', $delete_after_x_days)->get();

此代码段不包含过去30天内创建媒体项目且尚未查看的情景,因此不应删除。

不知何故,如果created_at为空,我需要检查last_viewed_at以确保媒体超过30天。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我不知道你的模型如何使用,但你的条件看起来像这样,

last_viewed_at is not null and last_viewed_at<= $delete_after_x_days

答案 1 :(得分:0)

最后,我想出了一个解决方案,感谢@knowledge ....&#39。提示。

$medias = Media::where('created_at', '<=', $delete_after_x_days)
    ->where(function ($medias) use ($delete_after_x_days) {
        $medias->where('last_viewed_at', '<=', $delete_after_x_days)
            ->orWhereNull('last_viewed_at');
    })
    ->get();

这可确保条目超过x天且last_viewed_at也超过30天或为空。