按列别名排序不适用于Laravel中的分页

时间:2018-07-24 14:34:52

标签: sql-server laravel-5 eloquent

我是Laravel的新手,我遇到了这个问题,在任何地方都找不到任何解决方案。

我想显示用户列表和他们拥有的设备数量(使用原始子查询)。您可以按名称或设备数量订购,每页的项目数量可以更改。

这是我要获取数据的查询:

  $users = DB::table('Users as U')    
                ->select('U.Name', 'U.Firstname', 'U.Email'
                        DB::raw('(SELECT COUNT(*)
                            FROM Devices D
                            INNER JOIN Relation_Device_User RDU ON D.DeviceID = RDU.DeviceID
                            INNER JOIN Users US ON RDU.UsersID = U.UsersID
                            WHERE US.ADusername = U.ADusername) AS nb_devices'))
        ->orderBy($sort, $dir)->paginate($perpage);

一切正常。分类工作。分页工程。但是,如果我按设备数量排序,然后转到第2页(或任何大于1的页面),则会出现以下错误:

SQLSTATE[42S22]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Nom de colonne non valide : 'nb_devices'. (SQL: select * from (select [U].[Firstname], [U].[Name], [U].[Email], (SELECT COUNT(*)
FROM Device D
INNER JOIN Relation_Device_User RDU ON D.DeviceID = RDU.DeviceID
INNER JOIN Users US ON RDU.UsersID = U.UsersID
WHERE US.ADusername = U.ADusername) AS nb_devices, row_number() over (order by [nb_devices] desc) as row_num from [Users] as [U]) as temp_table where row_num between 21 and 40)

第1页没有错误,其中按设备数量排序符合预期。因此,我怀疑此问题来自分页功能,但我不知道如何解决此问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我没有在Laravel中找到解决此问题的简便方法。

您必须将子查询移动或复制(如果需要在结果中使用nb_devices)到ORDER BY子句:

->orderByRaw('(SELECT COUNT(*) [...])')