1

このチュートリアルに従って、結合テーブルとの多対多の関係をフォーム エンティティとして作成しようとしています: http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html

私の場合、次のクラスがあります。

  • 問題 / ユーザー / 割り当てられたユーザー

AssignedUser エンティティは、Issue と User の間の結合テーブルです。

私のフォームでは:

 $builder->add('assigned', 'entity', array(
            'required'  => false,
            'class'     => 'MyBundle:User',
            'expanded' => true,
            'multiple' => true
        ));

私の問題クラス。名前空間など一部省略。

(...)

        /**
         * 
         * @ORM\OneToMany(targetEntity="(...)AssignedUser", mappedBy="issue",cascade={"persist", "remove"})
         *
         */
        protected $assignedUsers;

       /**
        * needed for the form to renders the users for select.
        */
        protected $assigned;


        public function getAssigned()
        {
            $assigned = new ArrayCollection();

            foreach($this->assignedUsers as $value)
            {
                $assigned[] = $value->getUser();
            }

            return $assigned;
        }


        // Important
        public function setAssigned($users)
        {
            foreach($users as $user)
            {
                $au = new IssueAssignedUser();

                $au->setIssue($this);
                $au->setUser($user);

                $this->addAssignedUser($au);
            }

        }

        /**
         * construct
         */
        public function __construct(){      
            $this->assignedUsers    = new ArrayCollection();      

            $this->assigned = new ArrayCollection();
}


 public function addAssignedUser($assignedUser)
    {
        $this->assignedUsers[] = $assignedUser;

        return $this;
    }

問題は setAssigned メソッドにあります。

   $au->setIssue($this);

私の問題担当ユーザー:

/**
 * IssueAssignedUser
 *
 * @ORM\Table(name="sup_issue_assigned_user")
 * @ORM\Entity(repositoryClass="Ueb\Support\Bundle\IssueBundle\Entity\Repository\IssueAssignedUserRepository")
 */
class IssueAssignedUser
{


    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="...\Issue",inversedBy="assignedUsers",cascade={"persist"})
     * @ORM\JoinColumn(name="issue_id", referencedColumnName="id",nullable=false,onDelete="CASCADE")
     * @ORM\Id
     */
    private $issue;


    /**
     * @var \Ueb\Accounts\Bundle\UserBundle\Entity\User
     * 
     * @ORM\ManyToOne(targetEntity="...\User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=false,onDelete="CASCADE")
     * @ORM\Id
     */
    private $user;


    /**
     * @var \DateTime
     * 
     * @ORM\Column(name="created_at", type="datetime")
     * @Gedmo\Timestampable(on="create")
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime")
     * @Gedmo\Timestampable
     */
    private $updatedAt;

エラーが発生します:

タイプ ... IssueAssignedUser のエンティティは、外部エンティティ Issue を介して ID を持っていますが、このエンティティ自体には ID がありません。関連するエンティティで EntityManager#persist() を呼び出し、永続化を試みる前に識別子が生成されたことを確認する必要があります

教義は最初に Issue エンティティを永続化し、それらだけが関連するエンティティを永続化しようとするのではないでしょうか?

私は何を間違っていますか?

4

1 に答える 1

1

問題を呼び出す前に、問題をデータベースに永続化する必要がありますsetAssignedUsers()

$em->persist($issue);
于 2013-02-20T19:35:40.473 に答える