Doctrine 2继承映射策略需要建议

时间:2011-06-29 13:23:26

标签: php mapping doctrine-orm

我会尝试解释我的问题。不久,我有地址表,房间表,建筑物表和用户表。地址表应该能够通过ID来保存房间,建筑物和用户的地址。由于我不能使用直接关联映射,我需要一个继承映射。让我明确表示我不擅长继承映射问题。我的解决方案是创建一个Alias表,它保存房间,建筑物和用户的ID(以及它们的类名)和地址表可以直接与此Alias表交互。所以在SQL风格中,这将是加入Alias和用户然后加入地址表找到用户的地址。但是,我无法确定哪种映射样式适合。你能给我一些建议吗,并给我一个简短的解释,为什么会这样? 感谢。

1 个答案:

答案 0 :(得分:0)

我建议你使用像
这样的关系 我想这个结构(用户可以拥有地址,建筑物有地址,房间有建筑物)

users
 address
  buildings
   rooms

并为其编码

/**
 * @orm:Table(name="rooms")
 * @orm:Entity
 */
class Room {
    ....
    /**
     * @orm:InheritanceType("JOINED")
     * @orm:OneToOne(targetEntity="Building")
     * @orm:JoinColumn(name="bid", referencedColumnName="id", onDelete="CASCADE", nullable=false)
     */
    private $building;
    ....
}

/**
 * @orm:Table(name="Buildings")
 * @orm:Entity
 */
class Building {
    ....
    /**
     * @orm:InheritanceType("JOINED")
     * @orm:OneToOne(targetEntity="Address")
     * @orm:JoinColumn(name="aid", referencedColumnName="id", onDelete="CASCADE", nullable=false)
     */
    private $address;
    ....
}

/**
 * @orm:Table(name="rooms")
 * @orm:Entity
 */
class Address {
    ....
    /**
     * @orm:InheritanceType("JOINED")
     * @orm:OneToOne(targetEntity="User")
     * @orm:JoinColumn(name="uid", referencedColumnName="id", onDelete="CASCADE", nullable=false)
     */
    private $user;
    ....
}

/**
 * @orm:Table(name="users")
 * @orm:Entity
 */
class User {
....
}
使用doctrine和symfony

时需要

@orm: