【问题标题】:Laravel - Ambiguous Column Name when using OffsetLaravel - 使用偏移时不明确的列名
【发布时间】:2020-03-11 12:40:42
【问题描述】:

我正在使用 offsetlimit 对通过 API 返回的结果进行分页。我从两个名为sscusers 的表中查询,它们都有一个名为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][ODBC Driver 17 for SQL Server][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 表明这两个函数都没有额外的参数。

【问题讨论】:

  • 我们无法真正帮助您,因为我们不知道变量 $orderBy 是如何填充的以及它的可能值是什么

标签: php sql-server laravel eloquent


【解决方案1】:

根据@N69S 的评论,问题在于$orderBy 变量仅定义为id,导致sscu 之间的歧义。切换到u.id 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2014-05-03
    • 2018-01-21
    • 2020-11-28
    相关资源
    最近更新 更多