1

我正在使用 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 额外列时,返回的记录数是正确的,但表给出“未找到匹配记录”。我不知道可能是什么问题?

4

1 回答 1

0

在我的 laravel 控制器中,我将表的列列表放入会话变量中。之后,表的排序停止工作。也许它与绑定集合不可变数组有关。然后我只是制作了该列表的对象副本,并且排序再次开始正常工作。

于 2020-12-08T00:41:25.367 回答