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