0

私はsymfony2プロジェクトで多対多の関係を使用しており、2つのエンティティ「Users」を正常に作成しました。また、Groupsデータを挿入するデータとテーブルを使用して永続化することもできました。usersgroupsusers_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 に答える