laravel DataTables 查询关键词匹配关联表字段
Laravel 的 DataTables 库 可以在与前端简单交互,快速构建后台列表页面,包括所有字段的查询、排序等功能。
这边因为刚接触这个 DataTables 库,只知道简单的格式化使用,在遇见需要查询关联表的字段时遇到了困难。
正常的调用(摘自 github readme 示例):return datatables()->of(User::query())->toJson();
,现有代码里的写法(yajra/laravel-datatables-oracle:~6.0):return Datatables::of($data)->add[edit]Column('xx', function(){})->make(true);
,这种写法可以查询、筛选之后对结果集进行增加或修改字段,分页处理,并返回 json 格式数据。
使用中发现,列表页中的字段对应是否可以搜索,以及匹配的表中字段在前端初始化参数中的 columns 中的 searchable 和 name 定义的。
$('#users-table').DataTable({
processing: true,
serverSide: true,
stateSave: true,
ajax: {
url: '{{ route("path.to.getData") }}',
type: 'post',
data: {status: 0, trashed: false}
},
columns: [
{data: 'id', name: 'id', searchable:true},
{data: 'name', name: 'name'},
...
],
order: [[0, "asc"]],
searchDelay: 500
});
searchable 默认为 true,表示可以搜索,后台会使用 name 字段定义作为查询字段,匹配提交的 $request->input('search.value');
参数(或者取对应索引的 columns[i][name]
、columns[i][search][value]
)。
如果查询关联表字段,当 Datatables::of($data)
中的 $data
为 query 对象时,需要使用表名.字段
形式,比如 shops.name
,使用 select()
别称无效且报错找不到字段;当 $data
为查询结果集 collection(增加 get()
)时,可以使用 select()
选择的别称字段名作为 name 使用。