2

所以这个项目正在将一些直接的 PDO SQL 查询(使用 MySQL)移动到 Doctrine。这些表已经存在并且其中有数据。我设置了实体,一切看起来都是金色的。所有查询都用 Doctrine 中的实体管理器重写,一切似乎都正常。

除了我忘记了其中一个实体中的三个字段必须可以为空。它们在数据库中设置为 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;

这绝对让我感到困惑。我真的没有更多方法可以告诉程序它可以为空。

4

1 回答 1

3

你好,不知道你还有没有这个问题。

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

我认为它会解决问题

于 2013-12-30T13:07:12.303 回答