Php 如何使用Doctrine和Symfony2调试失败的DB写入?
在控制器中,我在提交表单和Php 如何使用Doctrine和Symfony2调试失败的DB写入?,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,在控制器中,我在提交表单和isValid() 我已经检查了$form->getData()的内容,它看起来不错,但没有写入表中。日志中没有任何错误。我如何开始调试它?在我的实体类中,它是用于用户注册的,我有一个创建日期字段。为了填充这个字段,我 // this is the WRONG version class User{ //... /** * @ORM\Column(type="datetime") */ protected $created;
isValid()
我已经检查了
$form->getData()
的内容,它看起来不错,但没有写入表中。日志中没有任何错误。我如何开始调试它?在我的实体类中,它是用于用户注册的,我有一个创建日期字段。为了填充这个字段,我
// this is the WRONG version
class User{
//...
/**
* @ORM\Column(type="datetime")
*/
protected $created;
//...
public function __construct()
{
$this->created = date("Y-m-d H:i:s");
}
public function setCreated(\DateTime() $created)
{
$this->created = $created;
}
}
然而,我应该做的是:
/**
* ... other orm settings
* @ORM\HasLifecycleCallbacks()
*/
class User{
/**
* @ORM\Column(type="datetime")
*/
protected $created;
//....
/**
* @ORM\prePersist
*/
public function setCreatedValue()
{
$this->created = new \DateTime();
}
}
我没有发现这一点的原因是日志文件中没有记录任何错误。我是以ajax调用的形式提交此表单的,在打开firebug(依赖于默认的chrome控制台)之前,我没有考虑在ajax调用的响应中查找错误
我不记得可以返回的确切错误,但它与DateTimeType有关。您的代码示例太小,无法准确定位问题,但是我猜entitiy manager无法使用该实体。是否使用有效的实体来存储表单数据?-有关文档,请参阅。感谢您的评论。你说得对,这个片段太小了。我希望有一种方法可以看到Doctrine试图做什么,例如getSqlQuery()。实际上,我的问题是我需要使用生命周期回调来设置创建日期。当我使用AJAX时,问题变得更加复杂,在我开始使用firebug之前,我错过了错误响应。我假设同样的错误会出现在日志中。。。活到老学到老!你几乎可以做任何事情,例如SQL查询:-请在下面添加解决问题的答案。我认为更多的用户可以从信息中受益。需要在windows以外的任何平台上使用。
/**
* ... other orm settings
* @ORM\HasLifecycleCallbacks()
*/
class User{
/**
* @ORM\Column(type="datetime")
*/
protected $created;
//....
/**
* @ORM\prePersist
*/
public function setCreatedValue()
{
$this->created = new \DateTime();
}
}