Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony ModelManagerException:未能创建对象_Symfony_Sonata Admin - Fatal编程技术网

Symfony ModelManagerException:未能创建对象

Symfony ModelManagerException:未能创建对象,symfony,sonata-admin,Symfony,Sonata Admin,我正在使用Sonata管理包。当我提交一个创建实体表单时,如果表单有一些空字段,就会抛出ModelManagerException 我已经追踪到了首先抛出的PDO异常。引发异常是因为我的空字段获取空值,但我的表不允许空值。我不想要空字段,我想要空字符串。如何告诉Sonata管理类为没有值的字段创建带有空字符串的新实体,而不是空字符串 这是引发异常的查询: INSERT INTO some_table (name, username, email) VALUES (?, ?, ?)' with p

我正在使用Sonata管理包。当我提交一个创建实体表单时,如果表单有一些空字段,就会抛出ModelManagerException

我已经追踪到了首先抛出的PDO异常。引发异常是因为我的空字段获取空值,但我的表不允许空值。我不想要空字段,我想要空字符串。如何告诉Sonata管理类为没有值的字段创建带有空字符串的新实体,而不是空字符串

这是引发异常的查询:

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 
我尝试设置$this->name=;显式地在SomeEntity构造函数中,但它没有帮助。查询仍然具有null而不是。我尝试在我的管理类上重写getNewInstance,将name设置为value,但这也没有帮助-查询仍然使用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.
}
你有两个选择:

1-如果希望名称字段可以为空,则需要编辑名称注释:

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    protected $name;
2-如果创建新实例时希望名称字段仅为空字符串,则只需在entityAdmin中添加Preperist:

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

我希望它能有所帮助:

有一些DBAL异常与此相关。在symfony exception页面上向下滚动,您将看到它。

Hi,您能否在Resources/config/doctor/中添加实体声明,尤其是字段名@我正在使用注释。我已经添加了实体的一部分供您查看。