修改 laravel backpack 的 search 功能以支持中文

更新日期: 2017-10-24 阅读次数: 6723 分类: Laravel

backpack 的搜索功能有个致命缺陷,即对 created_at,updated_at 进行 like 操作,这样会造成搜索中文关键词时出现异常

Illegal mix of collations for operation 'like'

解决过程

find . -name AjaxTable.php                                                                                                                                              ./vendor/backpack/crud/src/app/Http/Controllers/CrudFeatures/AjaxTable.php

但是这里没有 search 相关的逻辑。

继续搜索

./vendor/livecontrol/eloquent-datatable/src/LiveControl/EloquentDataTable/DataTable.php

可以看到几个 filter 函数,就是这里了。

思路

  • 新建一个 class 继承这个,然后覆盖 filter
  • CRUDController 的 search 方法中再替换该类

但是替换之后依然不生效,仔细一看,addFilters 居然是私有函数。。。 我就不明白了,为何会有私有函数这种奇葩的设计。。。

只能将 DataTable 的代码复制一份到项目中进行修改了。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式