加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:30:40 所属栏目:MsSql教程 来源:网络整理
导读:在我的Symfony2项目中,我有两个相关实体:用户和收藏夹.他们有多对多的关系. 我的申请工作如下: 在我的Twig页面,我有几个项目,按钮“添加到收藏夹”.当您单击按钮时,我的控制器将item_id保存在收藏夹列中.但是我想要保存 将项目添加到他的收藏夹和我的应用程
在我的Symfony2项目中,我有两个相关实体:用户和收藏夹.他们有多对多的关系.

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

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

这是我的代码:

实体用户

class Users implements AdvancedUserInterface
{
    /**
     * @var DoctrineCommonCollectionsArrayCollection
     *
     * @ORMManyToMany(targetEntity="Favorites",inversedBy="user",cascade={"persist"})
     * @ORMJoinTable(name="user_has_favorite",*   joinColumns={
     *     @ORMJoinColumn(name="user_id",referencedColumnName="user_id")
     *   },*   inverseJoinColumns={
     *     @ORMJoinColumn(name="favorite_id",referencedColumnName="favorite_id")
     *   }
     * )
     */
    private $favorite;

    public function __construct()
    {
        $this->favorite = new DoctrineCommonCollectionsArrayCollection();
    }

    public function addFavorite(GeoCityTroopersBundleEntityFavorites $favorite)
    {
        $this->favorite[] = $favorite;

        return $this;
    }
...

实体收藏

class Favorites
{

    /**
     * @var DoctrineCommonCollectionsArrayCollection
     *
     * @ORMManyToMany(targetEntity="Users",mappedBy="favorite",cascade={"persist"})
     */
    private $user;

    public function __construct()
    {
        $this->user = new DoctrineCommonCollectionsArrayCollection();
    }
    public function addUser(GeoCityTroopersBundleEntityUsers $user)
    {
        $this->user[] = $user;    
        return $this;
    }

我的控制器

public function showNewsAction()
    {
        $request = $this->get('request');    
        $itemId=$request->request->get('itemId');
        if($itemId != NULL)
        {
        //MAKE NEW FAVORITE AND ADD TO DATABASE LINKED WITH ITEM
        $favorite = new Favorites();
        $favorite->setItemId($itemId);

         //LINK FAVORITE ID WITH USER ID IN JOINCOLUMN
        $userId = 6;
        $em = $this->getDoctrine()->getEntityManager();

        $user = $em->getRepository('GeoCityTroopersBundle:Users')->find($userId);

        $favorite->addUser($user);
        $em->persist($favorite); 

        //I TRIED THIS TOO,BUT IT FAILED
        /*$user->addFavorite($favorite);
        $em->persist($user);*/

        $em->flush();

解决方法

你在那儿很近对于学说多对多关系,您需要调用两个添加方法
$favorite->addUser($user);
$user->addFavorite($favorite);

$em->persist($favorite); 
$em->persist($user);
$em->flush();

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读