Laravel where time="0000-00-00" order by id 查不出结果

发布于 2022-09-12 02:16:16 字数 548 浏览 27 评论 0

Laravel版本是5.4
MySQL 是阿里云的 MySQL5.6

下面表的 time 字段的类型是 timestamp, 默认值是 '0000-00-00 00:00:00'

select * from table where time="0000-00-00" order by id

这条语句直接在MySQL的命令行直接执行是能查出结果的。
但是在Laravel中使用下面这两种方式都查不出结果:

$query = TableModel::where('time','0000:00:00')
            ->orderByDesc('id')
            ->get();
            
$query = \DB::select('select * from table where time="0000-00-00" order by id');

奇怪的是,上面两种方式去掉 order by 或者把where条件换成其他字段就能查出结果了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋你朝朝暮暮 2022-09-19 02:16:16

Laravel 的 config 下的 database.php

strict 设为 false 就好了

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'strict' => false,
],
我的影子我的梦 2022-09-19 02:16:16

相比关掉严格模式,我更加建议你使用 Carbon 把时间处理一下,或者 Laravel 中的 Date 类。

Model::where(Carbon::parse('0000-00-00'));
// 或者
Model::where(Carbon::parse('0000-00-00')->toDateTimeString());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文