Laravel 4(Eloquent)无法识别('date','<','NOW()') - 完全忽略它

时间:2014-08-12 13:05:57

标签: php mysql sql laravel

我有mysql表“公告”有帖子,还有列publish_date即DateTime

当我构建我的查询时:

$announcements = Announcement::where('status',1)
                    ->where('publish_date', '<','NOW()')
                    ->orderBy('publish_date', 'DESC')
                    ->paginate(9);

查询日志显示:

select * from `announcements` 
where `status` = 1 and `publish_date` < NOW() 
order by `publish_date` desc 
limit 9 
offset 0

然而,这是我的dd($ announcements-&gt; toArray()); (没有代表发布图像的代表权,http://i.imgur.com/EwTEIzI.png

如果您看到第一个结果是2014年8月14日的publish_date(今天是12日)

...无论其

当我在MySQL中对同一个数据库进行RUN IDENTICAL查询时: (没有代表,没有图片,对不起:http://i.imgur.com/GQurS6W.png

这让我疯了

我在where语句中尝试过单引号和双引号的各种组合。我删除了分页,我删除了状态,orderby,同样的结果。甚至基本疯狂检查:清除缓存。没有运气

我不是在正确地写出哪个陈述?


唯一有效的HACKJOB解决方案是:

$now = date('Y-m-d H:i:s');

.....

->where('publish_date', '<', $now)

虽然这有效,但从查询的角度来看,这不是一个合法的解决方案。还有其他一些例子我需要进行MySQL日期操作,例如,如果我不能使用NOW(),那么使用PHP替代方案就很难解决它。

我宁愿使用原生NOW()而不是将日期传递给查询。谢谢你们

1 个答案:

答案 0 :(得分:1)

Eloquent为此目的接受碳日期:

$announcements = Announcement::where('status',1)
                ->where('publish_date', '<',Carbon::now())
                ->orderBy('publish_date', 'DESC')
                ->paginate(9);

否则你可能会使用:

$announcements = Announcement::where('status',1)
                ->where('publish_date', '<',DB::raw('NOW()'))
                ->orderBy('publish_date', 'DESC')
                ->paginate(9);