簡體   English   中英

一對多/多對多中的持久鏈接-Doctrine和Symfony2

[英]Persist link in One-to-many / many-to-many - Doctrine and Symfony2

我使用用戶和帳戶實體進行多對多操作。 我需要將isOwner字段添加到關聯表,因此將其更改為一對多/多對一關系。 以下是我的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();

您正在嘗試將帳戶保留為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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM