Doctrine 从查询中返回奇怪的字段名称

网络程序员

我正在使用 "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_namelast_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL查询中的动态字段名称选择

来自分类Dev

在dapper查询中传递字段名称

来自分类Dev

仅查询Mongodb中的字段名称

来自分类Dev

子查询中的动态字段名称?

来自分类Dev

仅查询Mongodb中的字段名称

来自分类Dev

SQL查询-替换字段名称中的句点

来自分类Dev

MySQL查询中的动态字段名称选择

来自分类Dev

Excel查询中的动态字段名称

来自分类Dev

查询集注释中的动态字段名称

来自分类Dev

Laravel 查询中的 orderBy 字段名称

来自分类Dev

返回不同的字段名称Laravel?

来自分类Dev

在ruby中串联字段名称

来自分类Dev

dtype列表中的字段名称?

来自分类Dev

处理字段名称中的空格

来自分类Dev

Solr字段名称中的$

来自分类Dev

更改R中的字段名称

来自分类Dev

替换字段名称中的点

来自分类Dev

Doctrine - 创建多个查询

来自分类Dev

Pyodbc中经过清理的查询仅返回字段名称

来自分类Dev

使用“最大”和“计数”查询时返回字段名称

来自分类Dev

在Hibernate SQL查询中,如何转义?字段名称中的字符

来自分类Dev

在Hibernate SQL查询中,如何转义?字段名称中的字符

来自分类Dev

推进不将单引号添加到MySql查询中的字段名称

来自分类Dev

在数据透视SQL查询中为字段名称添加别名

来自分类Dev

Oracle在查询中定义字段名称,在哪里使用

来自分类Dev

MongoDB查询以在没有字段名称的嵌套数组中搜索文本

来自分类Dev

是否可以通过MongoDB中的值查询字段名称?

来自分类Dev

Salesforce SOQL问题:使用字段名称中的空格编写查询

来自分类Dev

从orm查询检索的对象中获取字段名称