我是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页没有错误,其中按设备数量排序符合预期。因此,我怀疑此问题来自分页功能,但我不知道如何解决此问题。
任何帮助将不胜感激。
答案 0 :(得分:1)
我没有在Laravel中找到解决此问题的简便方法。
您必须将子查询移动或复制(如果需要在结果中使用nb_devices
)到ORDER BY
子句:
->orderByRaw('(SELECT COUNT(*) [...])')