Laravel Backpack 后台列表页面查询关键词包含中文时报错

更新日期: 2018-12-24 阅读次数: 7367 分类: MySQL

报错信息如下

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 聊聊, 查看更多联系方式