2012-01-29 33 views
1

內部實體類中未調用:用命令主義生命週期回調似乎在堅持

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

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

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

更新數據庫中的數據:燈具:負荷給我一個錯誤:

Column created_at cannot be null.

有人能幫忙嗎?我錯過了什麼?

回答

4

定義你的回調函數後,你必須指定這2個功能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文件correspoding這個實體,你必須在生命週期回調調用這2個功能,

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的

任何值希望這會幫助你。 快樂編碼。

+0

我有同樣的問題http://stackoverflow.com/questions/17992549/symfony2-orm-prepersist-not-working能否請你建議? – neeraj 2013-08-06 06:45:47

+0

你好Neeraj @在YAML所以我覺得defenitly這是烏爾probs – 2013-08-06 07:02:08

+0

那麼我缺少的實體文件的文件intentation很重要嗎?你有沒有看到我上面提到的那篇文章? – neeraj 2013-08-06 07:04:35