我是symfony的新手,我環顧四周,但沒有找到正確的答案來解決我的問題。正確獲取多對多實體
我有兩個實體鏈接多對多的關係。實體User
- >實體FollowedUser
。 一個User
應該能夠跟隨幾個FollowedUser
和一個FollowedUser
應該有幾個Users
誰跟着他。
我的問題是,當我嘗試列出所有FollowedUser
一個User
,說我的CurrentUser
,我得到的不僅是那些所有FollowedUser
關聯到我的CurrentUser
。
這是我的代碼。
用戶實體(src/MyBundle/Entity/User.php
):
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',
);
}
}
注:的I註釋行是我發現做我想做什麼的唯一方式。但它並不覺得正確的做法。
在我的控制器:
$currentUser = $this->container->get('security.context')->getToken()->getUser();
$followedUsers = $currentUser->getFollowedUsers(); // That works properly
$form = $this->createForm(new UserType(),$currentUser);
編輯:
其實我的問題是,我忘了在我的多對多聲明一些註解。這裏是一個應該被用於一個unidirectionnal多對多關係的默認註釋:
/**
* @ManyToMany(targetEntity="Group")
* @JoinTable(name="users_groups",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
解決方案在這裏學說文檔中找到:doctrine2 unidirectionnal ManyToMany。
Thx爲您的答案。其實我不希望用戶能夠添加新的下列用戶。我想爲每個跟隨的用戶顯示一個獨特的'