且构网

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

Symfony:ManyToMany 表额外的列

更新时间:2023-12-01 14:33:58

您需要通过以下方式打破 ManyToManyOneToManyManyToOne 的关系引入一个名为 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
 * @ORMTable(name="user")
 * @ORMEntity
 */
class User
{
    /**
     * @ORMOneToMany(targetEntity="NameSpaceYourBundleEntityUserHasHouses", mappedBy="users",cascade={"persist","remove"} )
     */
    protected $hasHouses;

}

房屋实体

/**
 * Group
 * @ORMTable(name="house")
 * @ORMEntity
 */
class House
{
    /**
     * @ORMOneToMany(targetEntity="NameSpaceYourBundleEntityUserHasHouses", mappedBy="houses",cascade={"persist","remove"} )
     */
    protected $hasUsers;

}

UserHasHouses 实体

/**
 * UserHasHouses 
 * @ORMTable(name="user_house")
 * @ORMEntity
 */
class UserHasHouses 
{

    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORMManyToOne(targetEntity="NameSpaceYourBundleEntityHouse", cascade={"persist"}, fetch="LAZY")
     * @ORMJoinColumn(name="house_id", referencedColumnName="id")
     */
    protected $houses;

    /**
     * @ORMManyToOne(targetEntity="NameSpaceYourBundleEntityUser", cascade={"persist","remove"}, fetch="LAZY" )
     * @ORMJoinColumn(name="user_id", referencedColumnName="id",nullable=true)
     */
    protected $users;


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


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

}

在多对多中有额外的列Doctrine (Symfony2) 中的连接表