【问题标题】:SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' in order clause is ambiguous Laravel 5.5SQLSTATE [23000]:完整性约束违规:1052 列“created_at”在 order 子句中不明确 Laravel 5.5
【发布时间】:2019-02-22 13:08:43
【问题描述】:

我只是不知道我的代码有什么问题以及为什么会产生这个错误

SQLSTATE[23000]:完整性约束违规:1052 列“created_at”在 order 子句中不明确(SQL:select * from processes inner join bags on processes.bag_id = bags.@ 987654327@ where bags.type = Recyclable and date(processes.created_at) = 2018-09-18 00:00:00 order by created_at desc limit 1) 这是我的代码

$bag = Bagcollect::join('bags', 'bagcollects.bag_id', '=', 'bags.id')
        ->select('bags.type')
        ->where('bagcollects.bag_id', $request->input('bag_id'))
        ->first();

   //this query produce error
    $processexist = Process::join('bags', 'processes.bag_id', '=', 'bags.id')
        ->where('bags.type', $bag->type)
        ->whereDate('processes.created_at', Carbon::today())
        ->latest()
        ->first();

【问题讨论】:

  • 您已在多个表中创建了_at 列(此处正在加入这些表)。您需要指定特定的别名/表名才能使用特定的 created_at 列进行排序
  • 歧义列错误只能指向SELECTWHEREON(加入时)、HAVINGGROUP BY 子句添加到@MadhurBhaiya 的评论

标签: php mysql laravel laravel-5.5


【解决方案1】:

您需要在latest() 中指定完整列。 latest('process.created_at') 或使用自定义 orderBy 代替 latest()

【讨论】:

  • 知道了!谢谢!
【解决方案2】:

那是因为您正在从两个表中查询“created_at”列。您必须指定所需的列,例如:

$processexist = Process::join('bags', 'processes.bag_id', '=', 'bags.id')
        ->select('bags.column1', 'bags.columns2')
        ->where('bags.type', $bag->type)
        ->whereDate('processes.created_at', Carbon::today())
        ->latest()
        ->first();

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2022-11-24
    • 1970-01-01
    • 2020-11-23
    • 2021-10-11
    • 1970-01-01
    • 2022-08-18
    • 2021-02-05
    • 1970-01-01
    相关资源
    最近更新 更多