从symfony2中加入的DQL查询中提取数组元素


extracting array element from joined DQL query in symfony2

我使用联接查询从关联表中提取用户数据和角色数据。查询正在提取数据,但我不知道如何从联接中提取特定元素。

来自回购的查询:

public function loadAllUsers()
{
    $q = $this
        ->createQueryBuilder('u')
        ->select('u', 'r')
        ->leftJoin('u.roles', 'r')
        ->addOrderBy('u.username', 'ASC');
    return $q->getQuery()->getResult();
}

我的小树枝模板部分:

            {% for user in users %}
                <tr>
                    <td>{{ user.id }}</td>
                    <td>{{ user.username }}</td>
                    <td>{{ user.firstname }}</td>
                    <td>{{ user.lastname }}</td>
                    <td>{{ user.email }}</td>
                    <td>{{ user.lastLogged.date }}</td>
                    <td>{{ user.roles.name }}</td> <!-- insert role name in here -->
                    <td>{{ user.isactive }}</td>
                </tr>
            {% endfor %}

从发送到模板的用户对象的分支转储输出

users {#264 ▼
  -id: 1
  -username: "admin"
  -password: "$2y$12$9f76e741dd03a517a5207OkX/gjsP3mif2RxJIs00WyVUj4c3jYPS"
  -firstname: "Matt"
  -lastname: "HB"
  -isActive: true
  -email: "aaaa@aaaa.aaa"
  -lastLogged: DateTime {#262 ▶}
  -salt: "9f76e741dd03a517a5207b91476079c7"
  -roles: PersistentCollection {#280 ▼
    -snapshot: array:1 [ …1]
    -owner: users {#264}
    -association: array:20 [ …20]
    -em: EntityManager {#121 …10}
    -backRefFieldName: "users"
    -typeClass: ClassMetadata {#265 …}
    -isDirty: false
    -initialized: true
    -coll: ArrayCollection {#281 ▼
      -_elements: array:1 [▼
        0 => roles {#288 ▼
          -id: 6
          -name: "super_admin"
          -role: "ROLE_SUPER_ADMIN"
          -users: PersistentCollection {#289 ▶}
        }
      ]
    }
  }
}

我试了以下几行,但都没用。我需要用户的角色名称。

{{ user.roles.name }}
{{ user.roles.coll.name ]}

您需要在您的trick模板中使用一个循环来迭代各个角色,如下所示:

{% for role in user.roles %}
    {{ role.name }}
{% endfor %}