生命周期回调似乎不会在持久化时调用

时间:2012-01-29 12:55:53

标签: php symfony doctrine-orm

内部实体类:

/** @Entity @HasLifecycleCallbacks */ 
 class Job {

    /** @PrePersist */    
    public function setCreatedAtOnCreate()
    {
      //some code
    }

    /** @PrePersist */
    public function setExpiresAtOnCreate()
    { 
      //some code
    }

使用命令doctrine:fixtures:load更新数据库数据会给我一个错误:

  

列created_at不能为空。

有人可以帮忙吗?我缺少什么?

1 个答案:

答案 0 :(得分:4)

定义回调函数后,必须将这两个函数指定为lifecycleCallbacks的参数:在相应实体的yaml文件中。如果您使用XML指定那里。 下面是使用yaml生命周期回调如何工作的示例。

class myentity{

private $createdAt ;
private $updatedAt ;
public function setCreatedAtValue()
    {
      $this->createdAt = new \DateTime();
    }

    public function setUpdatedAtValue()
    {
        $this->updatedAt = new \DateTime();
    }
}

在与此实体对应的Yaml文件中,您必须在生命周期回调中调用这两个函数,

Myproject\MytBundle\Entity\myentity:
  type: entity
  table: myentity
  fields:
    id:
      id: true
      type: integer
      unsigned: false
      nullable: false
      generator:
        strategy: IDENTITY
  lifecycleCallbacks:
    prePersist: [ setCreatedAtValue,setUpdatedAtValue ]
    preUpdate: [ setUpdatedAtValue ]

此回调将在将数据插入数据库之前调用,并且setUpdatedAtValue函数将在更新Db中的任何值之前调用

希望这会对你有所帮助。 快乐的编码。