【发布时间】:2020-03-19 03:39:39
【问题描述】:
我正在尝试使用DataTables 来显示应用程序模型列表。 应用模型有操作:
public function operations(){
return $this->hasMany('\App\Operation', 'application_id', 'id');
}
操作模型有状态:
public function state(){
return $this->belongsTo('App\State', 'status_id', 'id');
}
及操作作者(用户):
public function user(){
return $this->hasOne('App\User', 'id', 'user_id');
}
要启用数据表,我正在使用此代码:
$(function() {
$('#applications-table').DataTable({
language: {
"url": "/js/Polish.json"
},
processing: true,
serverSide: true,
ajax: '{!! route('applications.data') !!}',
columns: [
{ data: 'number', name: 'number', className: "vertical_middle", searchable: true},
{ data: 'operations.0.correspondence', name: 'operations.correspondence', className: "vertical_middle", orderable: false, searchable: false},
{ data: 'operations.0.comment', name: 'operations.comment', className: "vertical_middle", orderable: false, searchable: true},
{ data: 'operations.0.prognosed', name: 'operations.prognosed', className: "vertical_middle", searchable: false},
{ data: 'operations.0.state.name', name: 'operations.state.name', className: "vertical_middle", searchable: false},
{ data: 'operations.0.created_at', name: 'operations.created_at', className: "vertical_middle", type: "date", searchable: true},
]
});
});
ApplicationController 正在使用此代码提供数据
$model = Application::with(array(
'operations' => function ($query) {
$query->orderByDesc('operations.created_at')->with('state')->with('user');
}
));
return Datatables::of($model)->make(true);
最后一个问题 - 表格正在正确呈现,但是当我尝试按第一列之外的另一列排序时,我收到警告:
DataTables 警告:表 id=applications-table - 请求第 0 行的未知参数“operations.0.correspondence”。
老实说,我不知道如何让它发挥作用。 提前谢谢你。
【问题讨论】:
-
您能告诉我们查询的结果吗?因为您应该知道 DataTable 期望您在查询返回时写入确切的列名。
-
@L.Flor 当然,这是点击排序另一列后的查询结果。 pastebin.com/X5PD0Kfd反正应该只返回3个应用,但是返回6行数据...
-
如果你想使用
DataTables我建议你不要使用关系。最好使用DB::select,然后使用join更好。而且,你为什么在那里使用0? -
获取操作数组的第一个元素。我试图制作 ->limit(1) 或 ->first() 但它不起作用......创建这个 Eloquent 模型(可能是我的代码)肯定有问题:)
-
看看这个。 stackoverflow.com/a/33163415/6459968 在使用 DataTables 时使用
DB::select比使用雄辩的关系要好得多。
标签: php laravel eloquent datatables