您好,当我想创建新帖子时,Sonata bundle 出现问题,我收到消息
SQLSTATE[23000]:违反完整性约束:1048 列“已创建”
不能为空
在我的实体类中,我使用 @ORM\HasLifecycleCallbacks() 来创建和更新操作。
实体
use Doctrine\ORM\Mapping as ORM;
/**
* Post
*
* @ORM\HasLifecycleCallbacks()
* @ORM\Table(name="post")
* @ORM\Entity(repositoryClass="ISLab\Bundles\BlogBundle\Entity\PostRepository")
*/
class Post
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var integer
*
* @ORM\Column(name="status", type="integer")
*/
private $status;
/**
* @var string
*
* @ORM\Column(name="body", type="text", nullable=true)
*/
private $body;
/**
* @var datetime
*
* @ORM\Column(name="created", type="datetime")
*/
private $created;
/**
* @var datetime
*
* @ORM\Column(name="updated", type="datetime")
*/
private $updated;
这是我在实体中用于创建和更新的方法。
/*
* Set Date Created
*
* @ORM\PrePersist
*
* @return \DateTime
*/
public function setCreated()
{
return $this->created = new \DateTime(date('Y-m-d H:i:s'));
}
/**
* Get Date Created
*
* @return Post
*/
public function getCreated()
{
return $this->created;
}
/**
* Set Date Modified
*
* @ORM\PrePersist
* @ORM\PreUpdate
*
* @return Post
*/
public function setUpdated()
{
$this->updated = new \DateTime();
return $this;
}
/**
* Get Udated Date
*
* @return Post
*/
public function getUpdated()
{
return $this->updated;
}
更新操作工作正常,当我编辑任何帖子时,他总是被自动调用。但是当我尝试创建新的帖子创建值时,为什么是 null idk?
最佳答案
根据报错信息,插入新实体时created
属性为null
。您 必须为 设置此属性的值。
您可以在实体类构造函数中设置它:
class Post
{
public function __construct()
{
$this->created = new \DateTime();
}
...
或者,您可以通过调用
setCreated()
在持久化实体之前设置它。关于Symfony2 列不能为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23369925/