Doctrine orm 从查询返回奇怪字段名的原则
我正在使用“条令/条令orm模块”:“^2.1”(它是zend framework 3的一个模块)。我想创建一个查询,它将返回带有字段名的行(普通,对吗?)。但我得到的不是字段的确切名称,而是以下查询结果:Doctrine orm 从查询返回奇怪字段名的原则,doctrine-orm,doctrine,zend-framework3,Doctrine Orm,Doctrine,Zend Framework3,我正在使用“条令/条令orm模块”:“^2.1”(它是zend framework 3的一个模块)。我想创建一个查询,它将返回带有字段名的行(普通,对吗?)。但我得到的不是字段的确切名称,而是以下查询结果: SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.email AS email_2, u0_.first_name AS first_name_3, u0_.last_name AS last_name_4,
SELECT
u0_.id AS id_0, u0_.username AS username_1, u0_.email AS email_2,
u0_.first_name AS first_name_3, u0_.last_name AS last_name_4,
u0_.password AS password_5, u0_.status AS status_6, u0_.created AS created_7,
u0_.modified AS modified_8
FROM
user_item u0_
ORDER BY
u0_.id DESC
此查询由以下代码生成:
$entityManager = $this->getEntityManager();
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('u')
->from(UserItem::class, 'u')
->orderBy('u.id', 'DESC')
;
$query = $queryBuilder->getQuery();
echo $query->getSql();
print_r($query->getParameters());
die('|||');
表名后面的“0”是什么?字段名称的附加“_x”是什么
如何在没有附加“\u x”的情况下获得普通字段和表的名称?仅是名称,我假设生成的SQL中显示了
名字和姓氏,对吗
我更改了下面的顺序,使其更易于阅读/理解
您要做的是(伪代码):从UserItem中选择所有的名字和姓氏
所以,这样编写代码:)
QueryBuilder中有什么
->from(UserItem::class,'u')
-第一个参数是您希望与QueryBuilder一起使用的实体的FQCN(完全限定类名)。第二个参数不是必需的,它是QueryBuilder的此实例用于识别类定义的FQCN的别名。(在我的头顶,它默认为类的蛇形名称,在本例中为“user\u item”)
->select(['u.first\u name','u.last\u name'])
-函数采用“mixed”参数。单击它的定义,您将在函数中看到以下内容:
$select=是否为数组($select)$选择:func_get_args()代码>
这表示它将始终将下一位上的“$selects
”作为数组传递。(另一个提示是,$selects
是复数)
->orderBy('u.id','DESC')
-创建一个规则来按顺序排列结果。如果单击此函数,您将看到此函数的结尾如下:
返回$this->add('orderBy',$orderBy)代码>
意思:您可以通过添加多个订单
当涉及到生成的DQL时:
u0\u0
是DQL中定义的表别名,根据您的问题:from user\u item u0\u0
,这将在稍后转换为MySQL(通常),MySQL将是相同的。它将u0\u0
设置为user\u项目的别名
- 属性名后面的
.*
只是列在数据库中创建时的顺序(请看,它们将按该顺序排列)
- 最后,您收到的是整个实体,而不仅仅是名称(
first\u name
&last\u name
),这是由于->select('u')
)。因为没有定义任何属性(或如上所示的属性),所以条令假设您希望接收整个enchalada。执行->select('u.first_name')
将只获得名字,使用上述数组将获得不止一个属性
希望这对您有所帮助:)我很困惑,我得到的是“选择u0.id作为id\u 0,u0.username作为username\u 1…”而不是“选择u.id作为id,u.username作为username…”。无论如何,我已经计算出“$query->getResult()”返回预期的字段名。在答案中添加了一个位来解决这个问题,并专门回答了剩余的别名问题。
$queryBuilder
->from(UserItem::class, 'u')
->select(['u.first_name', 'u.last_name'])
->orderBy('u.id', 'DESC'); // Might want to sort by either u.first_name or u.last_name