自动创建日期-注释-Codeigniter 2和Doctrine 2
自动创建日期-注释-Codeigniter 2和Doctrine 2
我正在使用Doctrine 2和Codeigniter 2,并希望Doctrine能够自动在表中的给定字段上插入当前日期。
类文件:
created_on = date('Y-m-d H:i:s'); } /* Setters & Getters */ public function setEmail($email){ $this->email = $email; } public function getEmail(){ return $this->email; } }
插入方法:
$worker = new models\Workers(); $worker->setEmail($data['email']); $this->em->persist($worker); $this->em->flush();
每次我在"workers"表中插入新记录时,"created_on"字段总是为NULL
,而不是插入日期。我做错了什么?
问题的原因是在Codeigniter 2和Doctrine 2中,使用注解创建日期自动更新功能时出现的错误。解决方法是将注解中的类型改为datetime,即使它会被应用为带有默认值CURRENT_TIMESTAMP的timestamp类型。timestamp类型在这里是无效的。
以下是解决方法的代码示例:
/** * timestamp $created_on * * (type="datetime", default="CURRENT_TIMESTAMP") */ protected $created_on;
感谢提供解决方案的作者。作者在尝试解决新问题之后会尽快尝试这个解决方法。作者在尝试解决问题时遇到了另一个错误,可以在这个链接(pastebin.com/pC313P0S)中查看错误信息。有没有什么想法?
问题出现的原因是Doctrine不支持默认值,但可以在PHP级别上进行设置。解决方法有两种:
1) 不使用Gedmo扩展,只使用Doctrine。根据Doctrine的文档,可以使用注解来设置默认值。需要编辑代码如下:
created_on = new \DateTime('now'); } /* Setters & Getters */ public function setEmail($email) { $this->email = $email; } public function getEmail() { return $this->email; } }
2) 使用Gedmo扩展。如果选择使用Gedmo的Timestampable扩展,可以简化代码。只需要添加`Timestampable`注解即可,不需要手动设置默认值。代码如下:
email = $email; } public function getEmail() { return $this->email; } }
以上是问题出现的原因和解决方法,感谢提供解决方案的作者。作者通过在属性注解中添加`@Column(type="integer", options={"default":1})`来设置默认值。