我有实体。
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 :(得分:2)
您不需要在数据库中为此定义触发器。
对于dateCreation,您可以在实体构造函数中初始化它:
public function __construct()
{
$this->dateCreation = new \DateTime('now');
}
和dateModification一样,你需要在preUpdate事件上触发一个方法:
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();
}
}