是否可以分页 DB::raw 查询?我得到:调用数组上的成员函数 paginate()

Posted

技术标签:

【中文标题】是否可以分页 DB::raw 查询?我得到:调用数组上的成员函数 paginate()【英文标题】:Is it posssible to pagina DB::raw query? I am getting: Call to a member function paginate() on array 【发布时间】:2021-04-28 07:08:59 【问题描述】:

是否可以对这样的 DB::raw 查询进行分页?我在加入的表中有相同的列名。当我在最后添加分页时,我得到“调用数组上的成员函数 paginate()”。

$basicQuery = DB::connection('mysql2')->select( 
            DB::raw(
                "
                SELECT
                `w`.`id`,
                `w`.`rodzaj`,
                `d`.`imie`,
                `d`.`nazwisko`,
                `d`.`firma`,
                `d`.`osoba`,
                `w`.`kwota`,
                `w`.`data`,
                `w`.`nazwa`,
                `p`.`nazwa` AS `partner`,
                `w`.`zmiana` AS `aktualizacja`,
                `s`.`status` AS `status`
            FROM `wniosek` AS `w`
            LEFT JOIN `dane` AS `d` ON `d`.`id` = `w`.`id`
            LEFT JOIN `partner` AS `p` ON `w`.`partner` = `p`.`id`
            LEFT JOIN `status` AS `s` ON `w`.`status` = `s`.`id`
            WHERE 
                `w`.`active` = '1'
            AND 
                `w`.`usun` = '0'
            ORDER BY 
                `w`.`data` DESC
            LIMIT 20"
            )
        );

【问题讨论】:

你试过$basicQuery->paginate(5) 吗? 是并得到:调用数组上的成员函数 paginate() 哦,那么你需要在查询生成器实例中转换它 怎么做? 【参考方案1】:

你不能在array 中进行分页,所以像这样在Query Builder 中转换这个原始查询

$basicQuery = DB::connection('mysql2')
    ->table('wniosek')
    ->select(
        'wniosek.id',
        'wniosek.rodzaj',
        'dane.imie',
        'dane.nazwisko',
        'dane.firma',
        'dane.osoba',
        'wniosek.kwota',
        'wniosek.data',
        'wniosek.nazwa',
        'partner.nazwa AS partner',
        'wniosek.zmiana AS aktualizacja',
        'status.status AS status'
    )
    ->leftJoin('dane','wniosek.id','=', 'dane.id')
    ->leftJoin('partner','wniosek.partner','=', 'partner.id')
    ->leftJoin('status','wniosek.status','=', 'status.id')
    ->where([
        'wniosek.active'=>'1',
        'wniosek.usun'=>'0',
    ])
    ->orderByDesc('wniosek.usun')
    ->paginate(20);

然后你就可以分页了

参考链接

https://laravel.com/docs/8.x/queries#introduction

https://laravel.com/docs/8.x/pagination#paginating-query-builder-results

【讨论】:

以上是关于是否可以分页 DB::raw 查询?我得到:调用数组上的成员函数 paginate()的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用查询生成器进行嵌套连接查询

laravel hydraRaw/fromQuery 和分页急切加载

11.分页技术

分页查询

sqlserver分页存储过程

Laravel 中的 DB Raw 查询错误