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

文章目录

    报错信息如下

    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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式