且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Symfony:ManyToMany表额外的列

更新时间:2023-12-01 14:43:16

您需要通过以下方式断开与 OneToMany ManyToOne ManyToMany 关系引入称为 UserHasHouses 的联结实体,这样您就可以在联结表 user_house

You need to break your ManyToMany relation to OneToMany and ManyToOne by introducing a junction entity called as UserHasHouses, This way you could add multiple columns to your junction table user_house

/**
 * User
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User
{
    /**
     * @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="users",cascade={"persist","remove"} )
     */
    protected $hasHouses;

}

房屋实体

/**
 * Group
 * @ORM\Table(name="house")
 * @ORM\Entity
 */
class House
{
    /**
     * @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasHouses", mappedBy="houses",cascade={"persist","remove"} )
     */
    protected $hasUsers;

}

UserHasHouses实体

/**
 * UserHasHouses 
 * @ORM\Table(name="user_house")
 * @ORM\Entity
 */
class UserHasHouses 
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\House", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="house_id", referencedColumnName="id")
     */
    protected $houses;

    /**
     * @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\User", cascade={"persist","remove"}, fetch="LAZY" )
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=true)
     */
    protected $users;


    /**
     * @var \DateTime
     * @ORM\Column(name="created_at", type="datetime")
     */
    protected $createdAt;


    /**
     * @var \DateTime
     * @ORM\Column(name="updated_at", type="datetime")
     */
    protected $updatedAt;
     //... add other properties
    public function __construct()
    {
        $this->createdAt= new \DateTime('now');
    }

}

在ManyToMany中有其他列Doctrine(Symfony2)中的联接表