2014-12-12 3 views
1

엔터티입니다.Doctrine : NULL이 아닌 필드 만 삽입하십시오.

My\Bundle\Entity\Service: 
    type: entity 
    table: SERVICE 
    fields: 
     idService: 
      id: true 
      type: integer 
      unsigned: false 
      nullable: false 
      column: ID_SERVICE 
      generator: 
       strategy: IDENTITY 
     codeService: 
      type: string 
      length: 5 
      fixed: false 
      nullable: false 
      column: CODE_SERVICE 
     dateCreation: 
      type: date 
      nullable: false 
      column: DATE_CREATION 
     dateModification: 
      type: date 
      nullable: false 
      column: DATE_MODIFICATION 

내 데이터베이스에는 dateCreation 및 dateModification을 설정하는 BEFORE INSERT 트리거가 있습니다.

내가 그를 자신의 일을 할 수 있도록하고 싶습니다,하지만 난 새로운 엔티티를 지속 할 때, 나는이 SQL 오류 가지고 :

An exception occurred while executing 'INSERT INTO SERVICE (CODE_SERVICE, DATE_CREATION, DATE_MODIFICATION) VALUES (?, ?, ?)' with params ["test", null, null]: 
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'DATE_CREATION' cannot be null 

이 할 수있는 방법이 있나요를? 내가

다음

트리거입니다 ... 트리거가 나쁜,하지만 난 어떤 선택의 여지가 없어 알고, 그것을 작동 :

CREATE TRIGGER `SERVICE_BI_TG` BEFORE INSERT ON `SERVICE` FOR EACH ROW BEGIN 
    BEGIN 
     SET NEW.DATE_CREATION=NOW(); 
     SET NEW.DATE_MODIFICATION=NOW(); 
    END 

문제는 내가 다른 필드에 설정되어 있다는 것입니다 INSERT 또는 UPDATE는 일부 외래 키와 다른 테이블의 일부 UPDATE와 마찬가지로 내 게시물을 위해 단순화했습니다.

+0

당신이 전에 삽입을위한 코드를 가지고 있나요? –

+0

방아쇠로 초기 게시물을 업데이트했습니다. – Ulti

+0

어디에서이 방아쇠를 설정 했습니까? doStuffOnPrePersist() 함수 엔티티를 통해이 작업을 수행하고 있습니까? –

답변

2

데이터베이스에 정의 된 트리거가 필요하지 않습니다.

public function __construct() 
{ 
    $this->dateCreation = new \DateTime('now'); 
} 

을 그리고 dateModification 당신은 방법에 필요 preUpdate 이벤트를 트리거 :

dateCreation를 들어 당신은 당신의 개체 생성자에서 초기화 할 수 있습니다

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\HasLifecycleCallbacks 
*/ 
class myEntity{ 

    /** 
    * @var \DateTime 
    * @ORM\Column(name="date_modification", type="datetime") 
    */ 
    private $this->dateModification; 

    /** 
    * @ORM\PreUpdate 
    */ 
    public function incremenDateModification() { 
     $this->dateModification = new \DateTime(); 
    } 
} 
+0

생성자를 추가하면 매번 생성 시간이 업데이트되지 않습니까? –

+0

이제 개체가 생성 될 때 한 번만 초기화됩니다. 그게 전부 야. –

+0

도움을 주셔서 감사합니다,하지만 해결 방법을 찾고 있어요. 나는 preUpdate/prePersist와 다른 교리 사건을 안다. 하지만 트리거에 대한 선택권이 없기 때문에 나는 결정하지 않는다. D (나는 트리거가 너무 싫다.) – Ulti

관련 문제