我是symfony的新手,我环顾四周但是找不到问题的正确答案。
我有两个与多对多关系链接的实体。实体User
- >实体FollowedUser
。
一个User
应该可以关注多个FollowedUser
,一个FollowedUser
应该有多个Users
关注他。
我的问题是,当我尝试为FollowedUser
列出所有User
时,请说出我的CurrentUser
,我得到的所有FollowedUser
不仅仅是与CurrentUser
相关联的src/MyBundle/Entity/User.php
1}}。
这是我的代码。
用户实体(namespace MyBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="My_user")
*/
class User extends BaseUser
// ...
/**
* @var FollowedUser[] $followedUsers
*
* @ORM\ManyToMany(targetEntity="MyBundle\Entity\FollowedUser")
*/
private $followedUsers;
// ...
public function getFollowedUsers()
{
return $this->followedUsers;
}
}
):
namespace MyBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use MyBundle\Entity\FollowedUserRepository;
class UserType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('followedUsers'); // This shows me the whole table
//,'entity' , array('class' => 'MyBundle\Entity\FollowedUser',
// 'multiple' => true,
// 'query_builder' => function(FollowedUserRepository $followedUserRepo) use ($options) {
// $followedUsers = $options['data']->getFollowedUsers();
// $choices = array();
// foreach ( $followedUsers as $followedUser){
// $choices[] = $followedUser->getId();
// }
// $qb = $followedUserRepo->createQueryBuilder('u');
// $qb->select('u')
// ->where( $qb->expr()->in('u.id',$choices));
// return $qb;
// }
// ));
}
public function getName()
{
return 'followedUser';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'MyBundle\Entity\User',
);
}
}
用户类型:
$currentUser = $this->container->get('security.context')->getToken()->getUser();
$followedUsers = $currentUser->getFollowedUsers(); // That works properly
$form = $this->createForm(new UserType(),$currentUser);
NB:我评论的线条是我发现做我想要的唯一方法。但它感觉不到正确的方法。
在我的控制器中:
/**
* @ManyToMany(targetEntity="Group")
* @JoinTable(name="users_groups",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
编辑:
实际上我的问题是我在ManyToMany声明中忘记了一些注释。以下是应该用于单向ManyToMany关系的默认注释:
{{1}}
在此处的学说文档中找到了解决方案:doctrine2 unidirectionnal ManyToMany。
答案 0 :(得分:0)
如果指定,则用于查询选项子集(及其选项) (应该用于该领域)。此选项的值可以 要么是QueryBuilder对象,要么是Closure。如果使用Closure,它 应该采用单个参数,即EntityRepository 实体。
如前所述,如果不指定query_builder
Symfony 2选项,您将获得所有FollowedUser
。含义:
$builder->add('followedUsers');
类似于:
followedUsers
类的User
的字段。entity
类型)。query_builder
选项未指定?然后获取所有用户。expanded
和multiple
选项)这些(选项)用户实际关注模型中的用户,同时取消选中所有其他(选项)用户。< / LI>
醇>
所以,问题是:为什么你只想在表单模型中显示跟随用户的用户?这是没有意义的......应用程序的实际用户将永远无法添加新的关注用户。