smo*_*ove 15 php doctrine doctrine-orm
我有这种情况:
抽象类:
abstract class AbstractBase
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @var integer
*/
protected $id;
/**
* @ORM\Column(type="datetime", name="updated_at")
* @var \DateTime $updatedAt
*/
protected $updatedAt;
/**
* @ORM\PreUpdate
*/
public function setUpdatedAt()
{
die('THIS POINT IS NEVER REACHED');
$this->updatedAt = new \DateTime();
}
}
Run Code Online (Sandbox Code Playgroud)
具体类:
/**
* @ORM\Entity(repositoryClass="Entity\Repository\UserRepository")
* @ORM\Table(name="users")
* @ORM\HasLifecycleCallbacks
*/
class User extends AbstractBase
{
// some fields, relations and setters/getters defined here, these all work as expected.
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的控制器中调用它,如下所示:
$user = $this->em->find('Entity\User', 1);
// i call some setters here like $user->setName('asd');
$this->em->flush();
die('end');
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,所以抽象类的id字段为User实体创建,我可以访问它等等.问题是,从未达到"死('这个点永远不会达到')"这一行.(注意@ORM\PreUpdate)这意味着不会在继承的对象上调用lifecycleCallbacks.这是一个错误,还是有原因的?
Ben*_*mer 35
您的抽象基类必须被添加为Mapped Superclasses并包含HasLifecycleCallbacks -Annotation.
更多信息:Doctrine文档中的继承映射.
/**
* @ORM\MappedSuperclass
* @ORM\HasLifecycleCallbacks
*/
abstract class AbstractBase
{
[...]
/**
* @ORM\PreUpdate
*/
public function setUpdatedAt()
{
$this->updatedAt = new \DateTime();
}
}
/**
* @ORM\Entity(repositoryClass="Entity\Repository\UserRepository")
* @ORM\Table(name="users")
*/
class User extends AbstractBase
{
// some fields, relations and setters/getters defined here, these all work as expected.
}
Run Code Online (Sandbox Code Playgroud)