我有多对多的实体关系,用户和项目 User实体只有一个字段,即id字段,因为它扩展了FOsUserBundle。我理解通过调用容器来访问当前登录的用户
$user = $this->container->get('security.context')->getToken()->getUser();
但事实并非如此。一个项目有很多用户保存在数据库中。现在我可以通过使用树枝循环来访问它
users_projects//a many to many table
project_id user_id
3 1
3 2
<td>{% for user in project.users %}{{ user.id}}{% endfor %}</td>
outputs 1,2
用户实体没有getUsername方法,因为它只有一个id字段。你会如何显示用户名而不是i.d?
更新
已经解决了这个问题。我真的不确定它是否正确。在ProjectType中,我添加了这个
->add('users', 'entity', array(
'class' => 'UserBundle:User',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.username', 'ASC');
},
'expanded' => true,
'multiple' => true
))
使用此设置
<td>
{% for user in entity.users %}
{{ user.username }}
{% if not loop.last %},{% endif %}
{% endfor %}
</td>
现在有效。不要忘记包括
use Doctrine\ORM\EntityRepository;
在FormType中,否则会抛出类似
的错误可捕获的致命错误:传递给.....的参数1必须是\ EmployeeBundle \ Form \ EntityRepository的实例,Doctrine \ ORM \ EntityRepository的实例给出