报错信息如下
Next Illuminate\Database\QueryException: SQLSTATE[HY000]:
General error: 1271 Illegal mix of collations for operation 'like'
(SQL: select count(*) as aggregate from `worker` where (`id` like %是是% or `na
me` like %是是% or `tel` like %是是% or `project` like %是是% or `team` like %是是% or `role` like %是是% or `in_time` like %是是% or `name` like %是是% or `id` like %是是%) order by `updated_at` desc) in
vendor/laravel/framework/src/Illuminate/Database/Connection.php:647
而使用英文单词时就一切正常。
查了一下,这是因为 MySQL 5.5 之后不允许对 datetime 字段进行 like 操作。
异常苦恼。。。 backpack 限制的很死,只要是显示在列表页的字段都会被默认加入搜索支持,改 搜索逻辑感觉也十分耗时。对于这种一次性写了就扔的项目完全不值得耗费时间。
所以,我有了一个十分大胆的想法。。。
把 datetime 字段改成 varchar 。。。
ALTER TABLE `worker`
CHANGE COLUMN `in_time` `in_time` VARCHAR(255) NULL DEFAULT NULL ;
更新之后,世界清净了。
Laravel Backpack 3.3 之后的解决方法,增加 searchLogic 设置。
$created_at = [
'name' => 'created_at',
'label' => '创建时间',
'searchLogic' => false,
];
更合逻辑的写法
参考
https://github.com/Laravel-Backpack/CRUD/issues/101
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式