0

再会。我想在数据表中显示我的数据,但遇到错误调用数组上的成员函数 getQuery()。

我是 laravel 和这个 yajra 库的新手。希望有人能帮我解决这个错误。

这是我的ajax。它会将 level_id 和 level 传递给我的控制器,然后如果匹配则返回查询结果。

//GENERAL
var $i=0;
var level_id = '{{ @$level->id }}';
var level = '{{ @$_level }}';

var viewStudent
function view_students($this){
    viewStudent
    if ($('#viewStudent-div').is(':hidden')) {
        $(".sidebar .menus").removeClass("active");
        $($this).addClass("active");

        $('#viewStudent-div').siblings().hide('slow/400/fast', function() {
            $('#viewStudent-div').show('slow/400/fast');
        });
    }
}

$(function(){
    viewStudent = $('#viewStudent-table').DataTable({
        order: [[ 0, "asc" ]],
        Language: {
            sLoadingRecords:"<img src='{{asset('assets/images/load.gif')}}' style='max-height:30px;'/> Fetching data...",
            sEmptyTable: "No data available"
        },
        ajax:{
            url:'{{ route("json_product_user") }}',
            data: function (d) {
                d.level_id = level_id;
                d.level = level;
            }
        },
        columnDefs: [
            {
                targets: 0,
                searchable:false,
                orderable:false,
            },
        ],
        columns:[
            {
                data: "full_name",
                render: function(data, type, row){
                    return data;
                }
            },
            {
                data: "product_name",
                render: function(data, type, row){
                    var html = '';
                    html += '<p style="">'+data+'</p>';
                    return html;
                }
            },
            {
                data: "level",
                render: function(data, type, row){
                    return data;
                }
            },
            {
                data: "date_purchase",
                render: function(data, type, row){
                var html = '';
                html += '<p style="text-align: center">'+moment(data).format('MMM-DD-YYYY')+'</p>';
                    return html;
                }
            }
        ]
    });
});

这是我的控制器

public function viewStudents(Request $request)
{
    if( $request->has('level_id') ){
        if($request->level == 'school') {
            $query = DB::table('product_user')
                ->leftJoin('products', 'product_user.product_id', '=', 'products.id')
                ->leftJoin('school_products', 'product_user.product_id', '=', 'school_products.product_id')
                ->leftJoin('users', 'product_user.user_id', '=', 'users.id')
                ->whereRaw("school_products.school_id = " . $request->level_id . " OR products.organization_id = ".$org_id)
                ->select('products.name as product_name', DB::raw('CONCAT(users.last_name, ", ", users.first_name ) AS  full_name'), 'product_user.created_at', 'products.level as level')
                ->get();
        }
        else{
            $query= DB::table('product_user')
                ->leftJoin('products', 'product_user.product_id', '=', 'products.id')
                ->leftJoin('school_products', 'product_user.product_id', '=', 'school_products.product_id')
                ->leftJoin('users', 'product_user.user_id', '=', 'users.id')
                ->whereRaw("products.level = 'organization' AND products.organization_id = ".$request->level_id)
                ->select('products.name as product_name', DB::raw('CONCAT(users.last_name, ", ", users.first_name ) AS  full_name'), 'product_user.created_at', 'products.level as level')
                ->get();

        }
    }
     //        return $query;
    return  Datatables::of($query)->make(true);
}
4

1 回答 1

1

我相信由于您使用的是 DB,因此 DB select 的返回类型是一个普通对象数组(stdClass)。在这种情况下,您必须将输出转换为 \Illuminate\Support\Collection,或者使用

$collection = new \Illuminate\Support\Collection($query);
return  Datatables::of($collection)->make(true);

或者

$collection = collect($query);
return Datatables::of($collection)->make(true);

collect() 在 laravel 5.3 中为我工作。请看一下这个答案: https ://github.com/laravel/docs/issues/2867#issuecomment-343664438

于 2018-06-11T11:21:22.537 回答