【发布时间】:2014-10-29 09:35:53
【问题描述】:
我正在使用Sonata Admin 捆绑包。当我提交“创建实体”表单时,如果表单有一些空字段,则会抛出 ModelManagerException。
我已将其追溯到最先抛出的 PDOException。抛出异常是因为我的空字段获取空值,但我的表不允许空值。我不想有空字段,我想要空字符串。我如何告诉Sonata Admin 类创建新实体,使用空字符串而不是为没有值的字段创建空值?
这是引发异常的查询:
INSERT INTO some_table (name, username, email) VALUES (?, ?, ?)' with params [null, "my name", "test@mailinator.com"]
这些是例外:
ModelManagerException: Failed to create object: Acme\DemoBundle\Entity\SomeEntity
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
我尝试在SomeEntity 构造函数中显式设置$this->name = '';,但没有帮助。查询仍然有null 而不是''。我尝试在我的 Admin 类上覆盖 getNewInstance() 以将 name 设置为 '' 值,但这也没有帮助 - 查询仍然有 null。
奇怪的是,我可以在实体编辑表单上有空字段 - 实体更新正常,空字段正确保存到数据库中。为什么会这样?
示例代码:
<?php
namespace Acme\DemoBundle\Entity
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="some_table")
*/
class SomeEntity
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*
* We can't use Assert\NotNull()
* because Admin bundle uses null values for empty fields!
*/
protected $name;
// Other fields and methods.
}
【问题讨论】:
-
您好,您能否在 Resources/config/doctrine/.. 中添加实体“some_table”的声明,尤其是“name”字段?
-
@sAr 我正在使用注释。我已添加实体的一部分供您查看。
标签: symfony sonata-admin