另一个问题。我有一个抽象的 BaseLog 实体,它保持与我的用户的关联。
此外,我有 2 个扩展 BaseLog 的实体(FooLog 和 BarLog)。此外,我有我的用户实体,它应该拥有两个与 Log 的关联。一种用于 FooLog,一种用于 BarLog。这是我的问题。我收到错误消息,因为我不知道如何在扩展实体时覆盖 BaseLog 的 inversedBy 字段。请你帮助我好吗。
因为我觉得我的解释不是很好,这里是我的实体的设置。
BaseLog
/** @ORM\MappedSuperclass */
abstract class BaseLog {
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="logs")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $user;
}
FooLog
/** @ORM\Entity */
class FooLog extends BaseLog {
// Some additional fields
}
BarLog
/** @ORM\Entity */
class BarLog extends BaseLog {
// Some additional fields
}
用户
/** @ORM\Entity */
class User {
/**
* @ORM\OneToMany(targetEntity="FooLog", mappedBy="user", cascade={"persist"})
*/
private $fooLogs;
/**
* @ORM\OneToMany(targetEntity="BarLog", mappedBy="user", cascade={"persist"})
*/
private $barLogs;
}
我如何在 FooLog 和 BarLog 中覆盖 BaseLog 的 inversedBy。
我在这个设置上遇到了几个映射错误:
基本日志
请帮我整理我的映射。
最佳答案
我对单一继承有类似的问题。我通过在两个实体类(父类和继承类)中定义相同的关联但名称不同来解决这个问题。在你的情况下,你可以试试这个:
/** @ORM\Entity */
class FooLog extends BaseLog {
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="foologs")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $user;
}
在 BarLog 类中:
/** @ORM\Entity */
class BarLog extends BaseLog {
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="barlogs")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $bar_user;
}
注意不同的名称($bar_user)。
您还必须在用户实体中定义 foologs 和 barlogs 属性。这消除了学说验证错误。
关于symfony - 学说2映射覆盖从MappedSuperclass继承的inversedBy字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832517/