我正在使用 laravel 5.4 和 yajra 数据表的服务器端处理(用于大量数据集),但无法对添加到表视图中的列执行排序。
我的表架构如下:
股票表:id (pk)、名称、符号,
例如
123、apple、aapl
stockfa 表:id、stock_id (fk)、roe、日期,
例如
1、123、15、01
/ 01/2007 2、123、16、01/01/2008
...
13、123、17、01 /01/2019
我想要一个数据表(带排序)如下:
id,name(排序),symbol,latest_roe(排序)
我的 laravel 控制器代码如下:
$stocks = Stock::whereIn('id', $idListArry)->select('stocks.*')
->addSelect(
DB::raw('(SELECT stockfa.roe FROM stockfa, stocks WHERE stocks.id = stockfa.stock_id and stockfa.date = (SELECT MAX(date) FROM stockfa where stocks.id=stockfa.stock_id)) as latestroe')
);
$stockListDatatable = Datatables::of($stocks)
->setTotalRecords($stocks->count())
->addColumn('latestroe', function ($stock) {
return round($stock->latestroe,1);
})
...
->make(true);
return $stockListDatatable;
我的视图刀片javascript如下:
$(function() {
$('#stocks-table').DataTable({
pageLength: 50,
order: [ 0, 'asc' ],
responsive : true,
processing: true,
serverSide: true,
....
columns: [
{ data: 'id', name: 'id',orderable: false },
{ data: 'name', name: 'name',orderable: true },
{ data: 'symbol', name: 'symbol',orderable: true },
{ data: 'latestroe',name: 'latestroe',orderable: true,sortable : true },
],
如果我没有额外的“latest_roe”列,一切正常。但是当我添加 latest_roe 额外列时,返回的记录数是正确的,但表给出“未找到匹配记录”。我不知道可能是什么问题?