2

ユーザーとアカウントのエンティティを使用して多対多でした。isOwnerフィールドを関連付けテーブルに追加する必要があったため、1対多/多対1の関係に変更しました。以下は私の3つのエンティティ(ユーザー、アカウント、ユーザーアカウント)です。

ユーザーを永続化すると、ユーザーレコードとアカウントレコードの両方が追加されますが、関連付けレコードは追加されません。また、ユーザーを永続化しながらisOwnerフィールドを設定する方法もわかりません。

アソシエーションレコードを永続化する方法を知っている人はいますか?アソシエーションレコードを自動的に追加する必要がありますか?

ユーザー:

/**
 * xxx\CoreBundle\Entity\User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User implements UserInterface
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $firstName
     *
     * @ORM\Column(name="firstName", type="string", length=255, nullable=false)
     * @Assert\NotBlank()
     */
    private $firstName;

    /**
     * @var Account
     *
     * @ORM\OneToMany(targetEntity="UserAccount", mappedBy="user", cascade={"persist"})
     */
    private $account;

    public function __construct()
    {
        $this->account = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set firstName
     *
     * @param string $firstName
     */
    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;
    }

    /**
     * Get firstName
     *
     * @return string 
     */
    public function getFirstName()
    {
        return $this->firstName;
    }

    /**
     * Add account
     *
     * @param xxx\CoreBundle\Entity\Account $account
     */
    public function addAccount(\xxx\CoreBundle\Entity\Account $account)
    {
        $this->account[] = $account;
    }

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

アカウント:

/**
 * xxx\CoreBundle\Entity\Account
 *
 * @ORM\Table(name="account")
 * @ORM\Entity(repositoryClass="xxx\CoreBundle\Repository\AccountRepository")
 */
class Account
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     * @Assert\NotBlank()
     */
    private $name;

    /**
     * @var User
     *
     * @ORM\OneToMany(targetEntity="UserAccount", mappedBy="account", cascade={"persist"})
     */
    private $user;

    public function __construct()
    {
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Add user
     *
     * @param xxx\CoreBundle\Entity\User $user
     */
    public function addUser(\xxx\CoreBundle\Entity\User $user)
    {
        $this->user[] = $user;
    }

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

ユーザーアカウント:

/**
 * xxx\CoreBundle\Entity\UserAccount
 *
 * @ORM\Table(name="user_account")
 * @ORM\Entity
 */
class UserAccount
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="account", cascade={"persist"})
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="Account", inversedBy="user", cascade={"persist"})
     */
    private $account;

    /**
     * @var boolean $isOwner
     *
     * @ORM\Column(name="isOwner", type="boolean", nullable=false)
     */
    private $isOwner;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

     /**
     * Get isOwner
     *
     * @return bool 
     */
    public function getIsOwner()
    {
        return $this->isOwner;
    }

    /**
     * Set isOwner
     *
     * @param string $isOwner
     */
    public function setIsOwner($isOwner)
    {
        $this->isOwner = $isOwner;
    }

    /**
     * Set user
     *
     * @param xxx\CoreBundle\Entity\User $user
     */
    public function setUser(\xxx\CoreBundle\Entity\User $user)
    {
        $this->user = $user;
    }

    /**
     * Get user
     *
     * @return xxx\CoreBundle\Entity\User
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Set account
     *
     * @param xxx\CoreBundle\Entity\Account $account
     */
    public function setAccount(\xxx\CoreBundle\Entity\Account $account)
    {
        $this->account = $account;
    }

    /**
     * Get account
     *
     * @return xxx\CoreBundle\Entity\Account
     */
    public function getAccount()
    {
        return $this->account;
    }
}

コントローラ:

$account = new Account();
$account->setName('Test account');

$user = new User();
$user->setFirstName('John');
$user->addAccount($account);

$manager->persist($user);
$manager->flush();
4

1 に答える 1

0

アカウントを UserAccount エンティティとして保持しようとしています。これを試して:

$account = new Account();
$account->setName('Test account');

$user = new User();
$user->setFirstName('John');

$user_account = new UserAccount();
$user_account->setAccount($account);
$user_account->setUser($user);

$manager->persist($user);
$manager->flush();
于 2012-06-22T16:27:24.353 に答える