I have this situation:
Abstract Class:
abstract class AbstractBase
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
* @var integer
*/
protected $id;
/**
* @ORMColumn(type="datetime", name="updated_at")
* @var DateTime $updatedAt
*/
protected $updatedAt;
/**
* @ORMPreUpdate
*/
public function setUpdatedAt()
{
die('THIS POINT IS NEVER REACHED');
$this->updatedAt = new DateTime();
}
}
Concrete Class:
/**
* @ORMEntity(repositoryClass="EntityRepositoryUserRepository")
* @ORMTable(name="users")
* @ORMHasLifecycleCallbacks
*/
class User extends AbstractBase
{
// some fields, relations and setters/getters defined here, these all work as expected.
}
Then i call it in my controller like this:
$user = $this->em->find('EntityUser', 1);
// i call some setters here like $user->setName('asd');
$this->em->flush();
die('end');
Everything works as expected, so the id field from the abstract class gets created for the User entity, i can access it etc. The problem is, that the line "die('THIS POINT IS NEVER REACHED')" is never reached. (Note the @ORMPreUpdate) This means that lifecycleCallbacks are not called on inherited objects. Is this a bug, or is there a reason for this?
See Question&Answers more detail:os