0

我在我的 symfony2 项目中使用了多对多关系,我已经成功地创建了两个实体“用户”,Groups并且我还成功地保存了将数据插入到表和表中的users数据groupsusers_groups

$user = new User();
$user->getGroups()->add($group);

现在我想编辑还应该编辑 users_groups 记录的用户。

我搜索了很多但没有运气。任何帮助将不胜感激......

控制器

   public function editAction()
  {
  if($this->getRequest()->query->get("id")){
        $id = $this->getRequest()->query->get("id");
        $request = $this->getRequest();

        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('DesignAppBundle:Users')->find($id);


        $editForm = $this->createForm(new UserType());


        if ($this->getRequest()->getMethod() == 'POST') {
        $editForm->bindRequest($request);
        if ($editForm->isValid()) {

                           $postData = $request->request->get('users'); 


                            $repository = $this->getDoctrine()
                            ->getRepository('Bundle:groups');
                            $group = $repository->findOneById($postData['group']);

                            $entity->addGroups($group );

                            $em->flush();

                            return $this->redirect($this->generateUrl('index'));            
            }

        }

        return $this->render('User.html.twig',array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
        ));
    }       
  }

形式

<?php

use and include .....


class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
    $request = Request::createFromGlobals();

         $builder->add('group', 'entity', array(
         'class' => 'Bundle:Groups',
         'property' => 'name',
         'empty_value' => 'All',
         'required' => true,
             'multiple'=>true,
         'data' => $request->get('group_id')
        ));



    }

    public function getDefaultOptions(array $options)
    {

        return array(
            'validation_groups' => array('users'),
            'csrf_protection' => false,

        );
    }

    public function getName()
    {
        return 'users';
    }

}

用户

 /**
     * @ORM\ManyToMany(targetEntity="Groups", inversedBy="users")
     * @ORM\JoinTable(name="users_groups",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
     *      )
     **/  
    protected $group;

 public function __construct()
{
    $this->group= new ArrayCollection();        

}

  public function addgroups(\Design\AppBundle\Entity\Categories $group)
    {
        $this->group[] = $group;
    }

团体

/**
     * @ORM\ManyToMany(targetEntity="Users", mappedBy="group")
     */
    protected $users;

    public function __construct()
    {
        $this->users= new ArrayCollection();
    }

    /**
     * Add users
     *
     * @param Bundle\Entity\Users $users
     */
    public function addUsers(Bundle\Users $users)
    {
        $this->users[] = $users;
    }

    /**
     * Get users
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getUsers()
    {
        return $this->users;
    }
4

1 回答 1

0

您不应该添加 group_id,您应该添加 groups 属性

     $builder->add('groups');

group_id 列由 Doctrine 自动处理,您不应该直接自己处理它。你有 group_id 属性吗?如果你这样做,你应该删除它。

集团实体应该是:

/**
 * @ORM\ManyToMany(targetEntity="Users", mappedBy="group")
 */
protected $users;

public function __construct()
{
    $this->users= new ArrayCollection();
}

/**
 * Add users
 *
 * @param Bundle\Entity\User $user
 */
public function addUsers(Bundle\User $users)
{
    $this->users[] = $users;
}

/**
 * Get users
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getUsers()
{
    return $this->users;
}

编辑

你的控制器应该是这样的:

public function editAction($request)
{
    $id = $this->getRequest()->query->get("id");

    $em = $this->getDoctrine()->getEntityManager();

    $entity = $em->getRepository('DesignAppBundle:Users')->find($id);

    $editForm = $this->createForm(new UserType(),$entity);

    if ($this->getRequest()->getMethod() == 'POST') {
        $editForm->bindRequest($request);
        if ($editForm->isValid()) {
             $em->persits($entity);

             $em->flush();

             return $this->redirect($this->generateUrl('index'));            
        }

    }

    return $this->render('User.html.twig',array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
    ));
}

这就是你的 UserType 应该是这样的:

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {

         $builder->add('group', 'entity', array(
         'class' => 'Bundle:Groups',
         'property' => 'name',
         'empty_value' => 'All',
         'required' => true,
          'multiple'=>true,
        ));

    }

    public function getDefaultOptions(array $options)
    {

        return array(
            'validation_groups' => array('users'),
            'csrf_protection' => false,

        );
    }

    public function getName()
    {
        return 'users';
    }

}
于 2012-09-18T14:34:46.607 回答