Php 对分页结果进行排序的拉维学说
我是一个新的信条,我已经开始把它用于一个个人项目。我正在使用laravel条令库让它与laravel一起工作 不幸的是,当我尝试对分页查询排序时,我看到以下错误:Php 对分页结果进行排序的拉维学说,php,laravel,doctrine-orm,Php,Laravel,Doctrine Orm,我是一个新的信条,我已经开始把它用于一个个人项目。我正在使用laravel条令库让它与laravel一起工作 不幸的是,当我尝试对分页查询排序时,我看到以下错误: An exception occurred while executing 'SELECT DISTINCT id_0 FROM (SELECT t0_.id AS id_0, t0_.title AS title_1, t0_.slug AS slug_2, t0_.views AS views_3, t0_.replies
An exception occurred while executing 'SELECT DISTINCT id_0 FROM (SELECT
t0_.id AS id_0, t0_.title AS title_1, t0_.slug AS slug_2, t0_.views AS
views_3, t0_.replies AS replies_4, t0_.created_at AS created_at_5,
t0_.updated_at AS updated_at_6, p1_.id AS id_7, p1_.body AS body_8,
p1_.created_at AS created_at_9, p1_.updated_at AS updated_at_10,
p1_.deleted_at AS deleted_at_11, c2_.id AS id_12, c2_.name AS name_13,
c2_.slug AS slug_14, c2_.created_at AS created_at_15, c2_.updated_at AS
updated_at_16 FROM topics t0_ LEFT JOIN posts p1_ ON t0_.id = p1_.topic_id
LEFT JOIN categories c2_ ON t0_.category_id = c2_.id) dctrn_result ORDER BY
created_at_5 ASC LIMIT 10 OFFSET 0':
SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not
in SELECT list, references column 'dctrn_result.created_at_5' which is not
in SELECT list; this is incompatible with DISTINCT
导致此错误的实际代码如下所示:
public function findAll($results = 10, $pageName = 'page') {
$query = $this->createQueryBuilder('t')
->select('t', 'f', 'c')
->leftJoin('t.first', 'f', 'ON')
->leftJoin('t.category', 'c', 'ON')
->orderBy('t.createdAt', 'asc')
->getQuery();
return $this->paginate($query, $results, $pageName);
}
我正在尝试选择一个主题列表,包括它们的类别和第一篇文章,所有这些都是按日期创建的主题排序的
我花了一些时间来研究这个问题,但到目前为止还无法弄清楚到底发生了什么,我是否应该用其他方法来做这件事,还是我的代码不正确?结果是
paginate()
的第四个参数导致了这个问题,它的默认值为true
,但将其设置为false
会使其再次开始工作
public function paginate(Query $query, $perPage, $pageName = 'page', $fetchJoinCollection = true)
只需将$fetchJoinCollection
设置为false。我不确定确切的原因,但它目前起作用。根据这一原则,计算正确的计数需要三个步骤:
我希望他们能在未来的版本中解决这个问题。我的错误与您的错误完全相同,但我的错误已离开join,必须将
$fetchJoinCollection
变为真。这个解决方案对我不起作用。