Ajax 调用 Eloquent Laravel 8 中的内部联接查询无效

Ajax call having Inner Join query in Eloquent Laravel 8 not working

我想在 Laravel 8 中使用内部联接从两个表中获取数据,并通过 Ajax 在前端将其显示为数据表。但是 ajax 调用返回内部服务器错误。

这是我的控制器

    if(request()->ajax()) {
        return datatables()->of(Machine::select("machine_base.id as id", "machine_base.machine_name as machine_name", "machine_base.machine_category as category_id", "item_category_base.category as category_name"))
            ->innerJoin("item_category_base", function($join){
            $join->on("item_category_base.id", "=", "machine_base.machine_category");
        })
        ->addIndexColumn()
            ->make(true);
    }
    return view('inventory.machine.machine_list');

Ajax请求:

 $('#dataList').DataTable({
        processing: true,
        serverSide: true,
        ajax: "/inventory/machine-list",
        columns: [
            { data: 'DT_RowIndex', name: 'id' },
            { data: 'machine_name', name: 'machine_name'},
            { data: 'category_name', name: 'category_name'},
        ]
});

等效的 mysql 查询效果很好:

SELECT machine_base.id as id, machine_base.machine_name as machine_name, machine_base.machine_category as category_id, item_category_base.category as category_name FROM machine_base
INNER JOIN item_category_base ON item_category_base.id = machine_base.machine_category

Select * 使用 Eloquent 语句运行良好。我缺少什么请帮我找出来。提前致谢。

我认为你应该使用 join 而不是 innerjoin

if(request()->ajax()) {
    return datatables()->of(  Machine::select("machine_base.id as id", "machine_base.machine_name as machine_name", "machine_base.machine_category as category_id", "item_category_base.category as category_name")->join('item_category_base', 'item_category_base.id', '=', 'machine_base.machine_category'))
     
        ->addIndexColumn()
        ->make(true);
}

你可以在这里参考更多关于连接的信息 参考:https://laravel.com/docs/8.x/queries#inner-join-clause