我正在使用 "doctrine/doctrine-orm-module": "^2.1"(它是 Zend 框架 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,
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”到字段名称?
如何在不附加“_x”的情况下获取普通字段和表名称?
只是名称,我假设生成的 SQL 中显示first_name
和last_name
,对吗?
我更改了下面的顺序,使其更易于阅读/理解。
你想要做的是(伪代码): Select from UserItem all the first & last names
所以,这样写代码:)
$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
QueryBuilder 中有什么?
->from(UserItem::class, 'u')
- 第一个参数是您希望与 QueryBuilder 一起使用的实体的 FQCN(完全限定类名称)。第二个参数不是必需的,它是用于 QueryBuilder 实例的别名,用于识别 FQCN 定义的类。(在我的头顶上,它默认为类的 snake_case 名称,在本例中为“user_item”)
->select(['u.first_name', 'u.last_name'])
- 函数采用“混合”参数。单击它的定义,您将在函数中看到以下内容:
$selects = is_array($select) ? $select : func_get_args();
这表明它总是将“ $selects
”作为数组传递下一位。(另一个提示$selects
是复数)
->orderBy('u.id', 'DESC')
- 创建一个规则来对结果进行排序。如果你点击进入这个函数,你会看到这个函数的结尾是这样的:
return $this->add('orderBy', $orderBy);
含义:您可以添加 1 个以上的订单。
当涉及到生成的 DQL 时:
u0_
是 DQL 中定义的表别名,来自您的问题:FROM user_item u0_
,稍后将转换为 MySQL(通常),这将是相同的。它设置u0_
为 的别名user_item
。
该_*
附加属性的名称,只是普通的,因为他们已经在数据库中创建的列的顺序(看看,他们会按照这个顺序)。
最后,您收到整个实体而不仅仅是名称 ( first_name
& last_name
)的事实是由于->select('u')
. 因为没有定义属性(或如上所示的属性),Doctrine 假设您希望接收整个 enchalada。这样做->select('u.first_name')
只会让你得到名字,并且使用上面的数组会让你得到超过 1 个属性。
希望能帮到你:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句