Laravel Datatable 默认搜索不适用于自定义过滤器

标签 laravel yajra-datatable

我在 laravel 中使用 yajra 数据表。我已经实现了该表。除了搜索之外,它工作正常。我也有一个自定义过滤器。 下面的代码显示了数据表初始化和ajax请求。用户类型过滤器工作正常。

<script>
    $(document).ready(function() {
            var table = $('#dataList').DataTable({
                processing: true,
                serverSide: true,
                ajax: {
                    url: "{{ route('users.user.index') }}",
                    data: function (d) {
                        d.user_type = $('#user_type_filter').val();
                    }
                },
                columns: [
                    {data: 'DT_RowIndex', name: 'DT_RowIndex'},
                    {data: 'name', name: 'name'},
                    {data: 'email', name: 'email'},
                    {data: 'phone', name: 'phone'},
                    {data: 'action', name: 'action', orderable: false, searchable: false},
                ]
            });
        $('#search-form').on('submit', function(e) {
            table.draw();
            e.preventDefault();
        });            
    } );
</script>

后端索引页过滤用户类型

public function index(Request $request)
{
    /**
     * Ajax call by datatable for listing of the users.
     */
    if ($request->ajax()) {
        $data = User::with('userType')->get();
        $datatable =  DataTables::of($data)
            ->filter(function ($instance) use ($request) {                    
                if ($request->has('user_type') && $request->get('user_type')) {
                    $instance->collection = $instance->collection->filter(function ($row) use ($request) {
                        //return Str::contains($row['phone'], $request->get('phone')) ? true : false;
                        return $row['user_type_id'] == $request->get('user_type');
                    });
                }  
               if ($request->input('search.value') != "") {
                     $instance->collection = $instance->collection->filter(function ($row) use ($request) {
                        return Str::contains($row['name'], $request->input('search.value')) ? true : false;
                    });
                }                                      
            })             
            ->addIndexColumn()
            ->addColumn('action', function ($user) {
                return view('users.datatable', compact('user'));
            })
            ->rawColumns(['action'])
            ->make(true);
        return $datatable;
    }

    $user_type = UserType::pluck('user_type','id')->all();
    $users = User::with('userType')->paginate(25);

    return view('users.index', compact('users','user_type'));
}

此代码仅在当前页面上生成搜索。

最佳答案

你应该这样尝试

   filterColumn('name', function($query, $keyword) {
                    $sql = "name like ?";
                    $query->whereRaw($sql, ["%{$keyword}%"]);
                })

引用此链接 https://datatables.yajrabox.com/fluent/custom-filter

关于Laravel Datatable 默认搜索不适用于自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65091131/

相关文章:

laravel - Yajra App\User 没有可用的引擎

php - Laravel 数据表 : How to sort column with the second data

php - Laravel,没有 Shell Access 的转储自动加载

linux - 我想在没有 PDO 的情况下使用 laravel

php - 如何在 Laravel 的控制台上打印消息?

php - 使用未定义常量 OCI_CRED_EXT - 假设 'OCI_CRED_EXT' laravel

php - Yajra 数据表全局搜索不起作用

php - 新的 Laravel 安装 v 5.4 index.php 抛出解析错误。 PHP 7.2.10-0ubuntu0.18.04.1

html - Laravel 显示没有图像的 html div

php - 为 Crud 类扩展基础数据表类