【问题标题】:ModelManagerException: Failed to create objectModelManagerException:创建对象失败
【发布时间】: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


【解决方案1】:

你有两个选择:

1-如果希望name字段可以为null,则需要编辑name注解:

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    protected $name;

2- 如果您希望在创建新实例时 name 字段只是一个空字符串,您只需在 entityAdmin 中添加 prePersist:

    public function prePersist($object)
    {
        $object->setName('');
    }

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    有一些与此相关的 DBAL 异常。在 symfony 异常页面向下滚动,你会看到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多