doctrine-orm - 从查询中返回奇怪字段名称的学说
问题描述
我正在使用 "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”的情况下获取普通字段和表名称?
解决方案
只是名称,我假设first_name
和都last_name
显示在生成的 SQL 中,对吗?
我更改了以下顺序,使其更易于阅读/理解。
你想要做的是(伪代码):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'd名称,在本例中为“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 个属性。
希望对您有所帮助:)
推荐阅读
- cookies - 如何在 GitHub Actions 中使用 cookie/身份验证运行测试?
- ubuntu - 无法建立与 http://controller:9696/v2.0/networks 的连接
- javascript - 我的查询选择器没有捕获所有 DOM 元素
- google-apps-script - 如何在 getSheetByName 中使用变量作为参数?
- django - DRF 中的动作装饰器不适用于 url_path
- python - 如何在 Python 中为协变可变集合类类使用类型提示?
- optaplanner - 使用时间链模式,为什么下一个任务的值总是为空?
- json - 从字符串初始化 JSONObject 时出错
- java - 在 Java 字节中取 8 位,范围是 -128 到 127 为什么不是 -127 到 128?
- python - 在 API 请求上获取 HTTPError