(Laravel yajra数据表)“订单数据表”列,其中包含关系的最新记录

时间:2019-12-25 21:22:28

标签: laravel datatables yajra-datatable

我使用yajra laravel-datatables将数据表运行到laravel中。 我有一个名为Orders的表,另一个名为statuss的表,其中包含相关订单的每个状态。例如:

Order 01 has status 01 - 10/12/2019, status 02 - 12/12/2019, status 03 - 16/12/2019
Order 02 has status 01 - 20/12/2019, status 02 - 21/12/2019, status 03 - 23/12/2019

我想获取订单数据及其各自的最新状态,对于它们两个来说都是状态03。为此,我有以下代码:

    public function statuses()
    {
        return $this->hasOne('App\Statutes', 'order_id')->latest($column = 'date');
    }

在提供数据表的控制器上,我有:

        $model = Order::with('statuses');
        return DataTables::eloquent($model)
        ->addColumn('data', function (Order $order) {
            return $order->statuses? str_limit($order->statuses->date, 30, '...') : '';
        })
        ->make(true);

在JS上:

$(document).ready(function() {
            var table = $('#orders').DataTable({
                processing: true,
                serverSide: true,
                searchDelay: 950,
                ajax: '{!! route('getorders') !!}',
                columns: [
                    { data: 'name', name: 'orders.name' },
                    { data: 'type', name: 'orders.type' },
                    { data: 'desc', name: 'orders.desc' },
                    { data: 'date', name: 'statuses.date' },
                ],
            });

        });   

这与official example一样,功能完善,并且甚至可以搜索statuses.date列。但是,我无法订购。 当我编写代码order: [[3, 'desc']]时,该列的所有值突然消失,它们显示为空。同样,IDK为什么,所有订单记录都分别显示2、3甚至4次。 我尝试单击列标题上的排序按钮进行排序时,也会发生同样的情况。

当我尝试订购另一列(如orders.name)时,它运行良好,并执行以下查询:

queries: [{,…},…]
    0: {,…}
        query: "select count(*) as aggregate from (select '1' as `row_count` from `orders`) count_row_table"
        bindings: []
        time: "0.56"
    1: {query: "select * from `orders` order by `orders`.`name` asc limit 10 offset 0", bindings: [],…}
        query: "select * from `orders` order by `orders`.`name` asc limit 10 offset 0"
        bindings: []
        time: "0.63"
    2: {,…}
        query: "select * from `statuses` where `statuses`.`order_id` in (14, 16, 19, 23, 24) order by `date` desc"
        bindings: []
        time: "0.76"

这很好用,可以显示名称列和statuses.date值排序的所有订单记录。

当我尝试订购statuses.date列时,将执行以下查询:

queries: [{,…}, {,…}, {,…}]
    0: {,…}
        query: "select count(*) as aggregate from (select '1' as `row_count` from `orders`) count_row_table"
        bindings: []
        time: "0.4"
    1: {,…}
        query: "select * from `orders` left join `statuses` on `statuses`.`order_id` = `orders`.`id` order by `statuses`.`date` asc limit 10 offset 0"
        bindings: []
        time: "0.84"
    2: {,…}
        query: "select * from `statuses` where `statuses`.`order_id` in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) order by `date` desc"
        bindings: []
        time: "0.66"

这显示了很多重复的记录,并且没有显示statuses.date列的任何值,因为它是空的。我还注意到,第三个查询显示了很多不存在的ID(唯一存在的ID是14、16、19、23、24)。 自从我试图弄清楚这一点已经有一段时间了,但我仍然不知道如何使列statuses.date可排序。

0 个答案:

没有答案