gpt4 book ai didi

php - 通过比较语句在 Doctrine 中排序结果

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:27 24 4
gpt4 key购买 nike

总结:我们可以在 Doctrine 中执行 ORDER BY parent_id = id DESC 吗?

我们有一个数据库表 Category,其中包含分层文章类别。该表如下所示:

CREATE TABLE IF NOT EXISTS `Category` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) default NULL,
`name` varchar(255) collate utf8_unicode_ci NOT NULL,
`sort` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_FF3A7B97727ACA70` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22 ;

层次结构只有一层深,顶层用它们的 parent_id 与它们的 id 相同来标识。

我们想使用 Doctrine QueryBuilder(DQL 也可以)获取所有行,以便所有类别都连续列出,类别的父级列在第一个,子级紧随其后。像这样:

id  parent_id   sort    name
-----------------------------------
1 1 1 Animals
5 1 1 Cat
10 1 3 Dog
9 1 2 Walrus
2 2 2 Fruits
13 2 3 Apple
12 2 2 Pear
11 2 1 Melon
3 3 3 Vehicles
15 3 2 Car
6 3 3 Train
14 3 1 Paraglider

使用这个本地 MySQL 查询,我们能够按照我们想要的顺序获取项目:

select * from Category order by parent_id asc, parent_id = id desc;

但是,我们不知道如何在 QueryBuilder 或 DQL 中执行此操作。问题是 parent_id = id 排序条件导致 DQL 出错:[Syntax Error] line 0, col 109: Error: Expected end of string, got '='

我们有一个使用 $em->createNativeQuery() 的解决方法,但我们真的很想找到一种正确的方法来以 ORM 方式执行此操作。

最佳答案

试试这个查询

SELECT *, CASE id WHEN parent_id THEN 1 ELSE 0 END AS custom_order
FROM Category
WHERE ORDER BY parent_id ASC, custom_order DESC;

关于php - 通过比较语句在 Doctrine 中排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com