我正在使用offset
和limit
对通过API返回的结果进行分页。我正在从2个名为ssc
和users
的表中查询,它们都具有名为id
(主键)的列。数据库驱动程序是Microsoft SQL Server。
[调用下面的查询时(其中$offset = 2
和$limit = 25
):
$cc = DB::table('ssc')->select('ssc.*','u.name')
->join('users AS u','ssc.supervisor_code','=','u.user_code')
->where('ssc.status','=',1)
->offset($offset)
->limit($limit)
->orderBy($orderby,$order)
->get();
我遇到以下错误:
SQLSTATE [42000]:[Microsoft] [SQL Server的ODBC驱动程序17] [SQL Server]模棱两可的列名'id'。
[Laravel(Eloquent)从上面的代码生成的查询:
select *
from (
select [ssc].*,
[u].[name],
row_number() over (order by [id] asc) as row_num
from [ssc]
inner join [users] as [u] on [ssc].[supervisor_code] = [u].[user_code]
where [ssc].[status] = 1
) as temp_table
where row_num between 26 and 50
如您在上面看到的,[id]
中的不明确列为order by
。
如何控制偏移量/限制中使用的表和列组合?检查Laravel API显示这两个功能没有多余的参数。
[@ N69S的评论,问题在于$orderBy
变量仅定义为id
,使其在ssc
和u
之间不明确。将其切换为u.id
解决了该问题。