在Symfony2中保存与数据库的多对多关系

前端之家收集整理的这篇文章主要介绍了在Symfony2中保存与数据库的多对多关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的Symfony2项目中,我有两个相关实体:用户和收藏夹.他们有多对多的关系.

我的申请工作如下:
在我的Twig页面,我有几个项目,按钮“添加到收藏夹”.当您单击按钮时,我的控制器将item_id保存在收藏夹列中.但是我想要保存
将项目添加到他的收藏夹和我的应用程序的用户失败.

用户和收藏夹存在,但用户和收藏夹之间的连接列保持为空.
我也没有收到任何错误.

这是我的代码

实体用户

  1. class Users implements AdvancedUserInterface
  2. {
  3. /**
  4. * @var \Doctrine\Common\Collections\ArrayCollection
  5. *
  6. * @ORM\ManyToMany(targetEntity="Favorites",inversedBy="user",cascade={"persist"})
  7. * @ORM\JoinTable(name="user_has_favorite",* joinColumns={
  8. * @ORM\JoinColumn(name="user_id",referencedColumnName="user_id")
  9. * },* inverseJoinColumns={
  10. * @ORM\JoinColumn(name="favorite_id",referencedColumnName="favorite_id")
  11. * }
  12. * )
  13. */
  14. private $favorite;
  15.  
  16. public function __construct()
  17. {
  18. $this->favorite = new \Doctrine\Common\Collections\ArrayCollection();
  19. }
  20.  
  21. public function addFavorite(\Geo\CityTroopersBundle\Entity\Favorites $favorite)
  22. {
  23. $this->favorite[] = $favorite;
  24.  
  25. return $this;
  26. }
  27. ...

实体收藏

  1. class Favorites
  2. {
  3.  
  4. /**
  5. * @var \Doctrine\Common\Collections\ArrayCollection
  6. *
  7. * @ORM\ManyToMany(targetEntity="Users",mappedBy="favorite",cascade={"persist"})
  8. */
  9. private $user;
  10.  
  11. public function __construct()
  12. {
  13. $this->user = new \Doctrine\Common\Collections\ArrayCollection();
  14. }
  15. public function addUser(\Geo\CityTroopersBundle\Entity\Users $user)
  16. {
  17. $this->user[] = $user;
  18. return $this;
  19. }

我的控制器

  1. public function showNewsAction()
  2. {
  3. $request = $this->get('request');
  4. $itemId=$request->request->get('itemId');
  5. if($itemId != NULL)
  6. {
  7. //MAKE NEW FAVORITE AND ADD TO DATABASE LINKED WITH ITEM
  8. $favorite = new Favorites();
  9. $favorite->setItemId($itemId);
  10.  
  11. //LINK FAVORITE ID WITH USER ID IN JOINCOLUMN
  12. $userId = 6;
  13. $em = $this->getDoctrine()->getEntityManager();
  14.  
  15. $user = $em->getRepository('GeoCityTroopersBundle:Users')->find($userId);
  16.  
  17. $favorite->addUser($user);
  18. $em->persist($favorite);
  19.  
  20. //I TRIED THIS TOO,BUT IT Failed
  21. /*$user->addFavorite($favorite);
  22. $em->persist($user);*/
  23.  
  24. $em->flush();

解决方法

你在那儿很近对于学说多对多关系,您需要调用两个添加方法
  1. $favorite->addUser($user);
  2. $user->addFavorite($favorite);
  3.  
  4. $em->persist($favorite);
  5. $em->persist($user);
  6. $em->flush();

这应该是诀窍.在the docs他们这样做,但不要太明确地提及.不知道为什么因为很多人遇到这个(包括我自己).

猜你在找的MsSQL相关文章