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

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条件换成其他字段就能查出结果了。

阅读 3k
2 个回答

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,
],

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

Model::where(Carbon::parse('0000-00-00'));
// 或者
Model::where(Carbon::parse('0000-00-00')->toDateTimeString());
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题