首页 > 解决方案 > 如何在 Laravel 8 Yajra 数据表中修复“顺序子句中的列‘created_at’不明确”

问题描述

我在我的 Laravel 项目中使用了 Yajra 数据表,但是在排序(也搜索)数据表时出现了问题。

order 子句中的列“created_at”不明确

我知道这个错误是因为其他表有'created_at'列。

但我不知道如何解决它。

这是我的控制器:

public function index()
{
    $partners = Partner::with(['term', 'user', 'invoices', 'bills', 'transactions']);
    $users = User::get(['id', 'first_name', 'last_name']);
    $terms = Term::get(['id', 'name']);
    $banks = Bank::get(['id', 'name']);
    return view('inc.partners', compact('partners', 'users', 'terms', 'banks'));
}

public function datatable()
{
    $partners = Partner::with(['term', 'user', 'invoices', 'bills', 'transactions'])->latest();

    return Datatables::of($partners)
        ->editColumn('full_name', function($partner) {
            return '<a href="'. route('partners.show', $partner->id) .'">' . $partner->full_name . '</a>';
        })->escapeColumns([])
        ->editColumn('term', function ($partner) {
            return $partner->term->name;
        })
        ->addColumn('type', function($partner) {
            if ($partner->type == 'Bilateral') {
                return '<span class="badge badge-pill badge-success">Bilateral</span>';
            } elseif ($partner->type == 'Customer') {
                return '<span class="badge badge-pill badge-info">Customer</span>';
            } else {
                return '<span class="badge badge-pill badge-primary">Supplier</span>';
            }
        })
        ->addColumn('user', function ($partner) {
            return '<a href="'. route('users.show', $partner->user->id) .'">' . $partner->user->first_name . ' ' . $partner->user->last_name . '</a>';
        })
        ->addColumn('balance', function ($partner) {
            return ($partner->invoices->sum('actual_invoice_amount') - $partner->bills->sum('actual_bill_amount')) + ($partner->transactions->where('type', 'credit')->sum('final_amount') - $partner->transactions->where('type', 'debit')->sum('final_amount'));
        })
        ->editColumn('status', function ($partner) {
            if ($partner->status) {
                return '<span class="badge badge-pill badge-primary">Active</span>';
            } else {
                return '<span class="badge badge-pill badge-secondary">InActive</span>';
            }
        })
        ->addColumn('action', function ($partner) {
            return
        '<a href="#" data-toggle="modal" id="edit-partner"
            onclick="edit_partner(this)"
            data-target="#edit_partner"
            data-id="'.$partner->id.'"
            data-action="'. route('partners.update', $partner->id) .'"
            data-full_name="'.$partner->full_name . '"
            data-code="'.$partner->code. '"
            data-street1="'.$partner->street1. '"
            data-country="'.$partner->country. '"
            data-state="'.$partner->state. '"
            data-city="'.$partner->city. '"
            data-zip_code="'.$partner->zip_code. '"
            data-type="'.$partner->type. '"
            data-inbound_credit="' . $partner->inbound_credit . '"
            data-outbound_credit="' . $partner->outbound_credit . '"
            data-notice_contacts="' . $partner->notice_contacts . '"
            data-status="' . $partner->status . '"
            data-credit="' . $partner->credit . '"
            data-debit="' . $partner->debit . '"
            data-user_id="' . $partner->user_id . '"
            data-term_id="' . $partner->term_id . '"
            ><i class="icon-pencil7"></i></a>

            <a href="'. route('partners.destroy', $partner->id) .'" data-toggle="modal"
             onclick="delete_partner('.$partner->id.')"
             ><i class="icon-trash text-danger"></i></a>';
        })
        ->make(true);
}

我的数据表脚本:

  $(function() {
        let partnersdatatable = $('#partnersdatatable-table').DataTable({
            pageLength: 100,
            processing: true,
            serverSide: true,
            ajax: '{{ route('partners.datatable') }}',
            columns: [{
                    data: 'code',
                    name: 'code'
                },
                {
                    data: 'full_name',
                    name: 'full_name'
                },
                {
                    data: 'term',
                    name: 'term.name'
                },
                {
                    data: 'inbound_credit',
                    name: 'inbound_credit'
                },
                {
                    data: 'outbound_credit',
                    name: 'outbound_credit'
                },
                {
                    data: 'user',
                    name: 'user.first_name'
                },
                {
                    data: 'type',
                    name: 'type'
                },
                {
                    data: 'balance',
                    name: 'balance'
                },
                {
                    data: 'status',
                    name: 'status'
                },
                {
                    data: 'action',
                    name: 'action',
                    orderable: false,
                    searchable: false
                },
            ],
            lengthMenu: [
                [10, 50, 100, 250, 3000, 5000],
                [10, 50, 100, 250, 3000, 5000]
            ],
            buttons: [{
                extend: 'colvis',
                text: '<i class="icon-three-bars"></i>',
                className: 'btn bg-blue btn-icon dropdown-toggle'
            }]
        });
        $('.filter-input').keyup(function() {
            partnersdatatable.column($(this).data('column')).search($(this).val()).draw();
        });
    });

更新 1

这是错误图片:

在此处输入图像描述

这个错误几乎存在于我所有的数据表中。

如何修复排序和搜索错误?

标签: phpsqllaraveldatatableyajra-datatable

解决方案


在哪一行导致错误。可能要追溯到另一​​个班级?通常要修复不明确的列名,只需在列名前添加表名,例如 users.created_at 而不是 created_at。


推荐阅读