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

更新日期: 2018-12-24 阅读次数: 4358 分类: 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 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年04月01日 愚人节
2020年04月02日 国际儿童图书日
2020年04月03日 寒食节
2020年04月04日 清明节
2020年04月07日 世界卫生日
2020年04月11日 世界帕金森病日
2020年04月19日 谷雨
2020年04月21日 复活节
2020年04月22日 世界地球日
2020年04月23日 世界读书日
2020年04月26日 知识产权日
2020年04月30日 佛诞
查看更多节日