【问题标题】:Laravel pagination fails in building the correct queryLaravel 分页无法构建正确的查询
【发布时间】:2016-02-16 16:55:53
【问题描述】:

当我尝试运行此查询时:

SELECT CONCAT(`user`.`firstName`,' ',`user`.`lastName`) AS `fullName`" 
FROM `user`
WHERE `fullName` LIKE '%a%'

使用User 模型,Laravel 在运行我的查询之前自己发送以下查询:

SELECT COUNT(*) AS AGGREGATE
FROM `user`
WHERE `fullName` LIKE '%a%'

导致SQLSTATE[42S22]: Column not found: 1054 Unknown column 'userFullName' in 'where clause 异常。 Laravel 有什么问题?如何运行有关此问题的上述查询?

【问题讨论】:

  • 发布你的 Laravel 代码,以及关于你的数据库结构的更多信息。仅凭这些信息是不够的。
  • @Bogdan 恐怕数据库结构在这里没有帮助。问题是在生成查询以计算行数时不使用列,正如 Marcin 所述

标签: php sql laravel laravel-5 laravel-5.1


【解决方案1】:

恐怕在这种情况下,您应该使用手动分页或将主查询重建为如下内容:

SELECT CONCAT(`user`.`firstName`,' ',`user`.`lastName`) AS `fullName` 
FROM `user`
WHERE CONCAT(`user`.`firstName`,' ',`user`.`lastName`) LIKE '%a%'

否则,当 Laravel 创建查询来计算行数时,它不会知道fullName 列是什么(因为在生成查询来计算行数时不使用列,在此查询中只使用了count(*)

【讨论】:

  • Laravel 分页能做一些简单的手动分页无法做到的事情吗?
  • 自动分页启动 2 个查询。当您为列使用别名并在 where 中使用此别名时,Laravel 将无法创建计数查询,因为在运行此查询时别名列将不存在
  • 查看使用查询获得数据集后,使用Illuminate\Pagination\LengthAwarePaginatorIlluminate\Pagination\Paginator 的实例手动创建分页
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2021-01-21
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多