Doctrine 从查询中返回奇怪的字段名称
Doctrine returning strange field names from query
我正在使用 "doctrine/doctrine-orm-module": "^2.1"(它是 zend 框架 3 的一个模块)。我想创建一个查询,该查询将 return 带有字段名称的行(微不足道,对吧?)。但是我得到的查询结果不是字段的确切名称:
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('|||');
table 名称后面的“0_”是什么?什么是将“_x”附加到字段名称?
如何获得没有附加“_x”的普通字段和 tables 名称?
只是名称,我假设 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(完全限定 Class 名称)。第二个参数不是必需的,它是用于此 QueryBuilder 实例的别名,用于识别 class 定义的 FQCN。 (在我的脑海中,它默认为 class 的 snake_case 名称,在本例中为 "user_item")
->select(['u.first_name', 'u.last_name'])
- 函数接受一个 "mixed" 参数。单击它的定义,您将在函数中看到以下内容:
$selects = is_array($select) ? $select : func_get_args();
这表示它将始终将下一位的“$selects
”作为数组传递。 (另一个提示是 $selects
是复数)
->orderBy('u.id', 'DESC')
- 创建一个规则来对结果进行排序。如果你点击这个函数,你会看到这个函数是这样结束的:
return $this->add('orderBy', $orderBy);
含义:您可以添加1个以上的订单。
说到生成的DQL:
u0_
是 DQL 中定义的 table 别名,根据您的问题:FROM user_item u0_
,稍后将转换为 MySQL (通常)这将是相同的。它将 u0_
设置为 user_item
的别名。
附加到 属性 名称的 _*
只是在数据库中创建的列的简单顺序(看一下,它们将是以该顺序)。
最后,您收到整个实体而不仅仅是名称(first_name
和 last_name
)的事实是由于 ->select('u')
。因为没有定义 属性(或如上所示的属性),Doctrine 假定您希望收到整个 enchalada。这样做 ->select('u.first_name')
只会让你得到第一个名字,而使用上面的数组会让你得到超过 1 属性.
希望对您有所帮助 :)
我正在使用 "doctrine/doctrine-orm-module": "^2.1"(它是 zend 框架 3 的一个模块)。我想创建一个查询,该查询将 return 带有字段名称的行(微不足道,对吧?)。但是我得到的查询结果不是字段的确切名称:
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('|||');
table 名称后面的“0_”是什么?什么是将“_x”附加到字段名称?
如何获得没有附加“_x”的普通字段和 tables 名称?
只是名称,我假设 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(完全限定 Class 名称)。第二个参数不是必需的,它是用于此 QueryBuilder 实例的别名,用于识别 class 定义的 FQCN。 (在我的脑海中,它默认为 class 的 snake_case 名称,在本例中为 "user_item")->select(['u.first_name', 'u.last_name'])
- 函数接受一个 "mixed" 参数。单击它的定义,您将在函数中看到以下内容:$selects = is_array($select) ? $select : func_get_args();
这表示它将始终将下一位的“$selects
”作为数组传递。 (另一个提示是 $selects
是复数)
->orderBy('u.id', 'DESC')
- 创建一个规则来对结果进行排序。如果你点击这个函数,你会看到这个函数是这样结束的:return $this->add('orderBy', $orderBy);
含义:您可以添加1个以上的订单。
说到生成的DQL:
u0_
是 DQL 中定义的 table 别名,根据您的问题:FROM user_item u0_
,稍后将转换为 MySQL (通常)这将是相同的。它将u0_
设置为user_item
的别名。附加到 属性 名称的
_*
只是在数据库中创建的列的简单顺序(看一下,它们将是以该顺序)。最后,您收到整个实体而不仅仅是名称(
first_name
和last_name
)的事实是由于->select('u')
。因为没有定义 属性(或如上所示的属性),Doctrine 假定您希望收到整个 enchalada。这样做->select('u.first_name')
只会让你得到第一个名字,而使用上面的数组会让你得到超过 1 属性.
希望对您有所帮助 :)