Symfony2 + Doctrine2 SQL完整性违规:Nullable字段不能为空?

时间:2013-09-23 19:12:16

标签: php mysql symfony doctrine-orm

因此,该项目正在将一些直接的PDO SQL查询(使用MySQL)移至Doctrine。这些表已经存在并且包含数据。我建立了实体,一切看起来都很金。所有的查询都是用Doctrine中的Entity Manager重写的,一切似乎都有效。

除非我忘记其中一个实体中的三个字段需要可以为空。它们在数据库中设置为NOT NULL,并且Doctrine注释中没有nullable = true声明。

我在MySQL中手动更改为表以使字段可为空,然后向实体添加了nullable = true,清除了缓存并执行了

php app/console doctrine:schema:update --force

只是为了确定(正确执行)。

然而,尽管Doctrine实体允许空字段,并且数据库的列也可以为空,但我仍然会收到此错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'type_id' cannot be null

有没有办法让我在不丢弃表格的情况下解决这个问题(这也会导致保存所有数据)?这到底出了什么问题?根据所涉及的所有代码和数据库,根本不应存在完整性违规(该字段也不是外键)。

以下是相关实体:

class Audio
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", name="id")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", name="type", columnDefinition="ENUM('song','demo')")
     */
    protected $type;

    /**
     * @ORM\Column(type="integer", name="type_id", nullable=true)
     */
    protected $typeId = null;

    /**
     * @ORM\Column(type="string", name="s3_url", nullable=true)
     */
    protected $s3url = null;

    /**
     * @ORM\Column(type="string", name="s3_key", nullable=true)
     */
    protected $s3key = null;

    /**
     * @ORM\Column(type="datetime", name="date_created")
     */
    protected $dateCreated;

    /**
     * @ORM\Column(type="datetime", name="date_modified")
     */
    protected $dateModified;

这绝对让我感到神秘。我真的没有办法告诉程序它可以为null。

1 个答案:

答案 0 :(得分:3)

嗨,我不知道你是否还有问题。

你可以做php app/console doctrine:schema:update --dump-sql 为了了解您的模型和数据库之间的差异。 并应用他会告诉你的那条线。

我认为它会解决问题