所以这个项目正在将一些直接的 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;
这绝对让我感到困惑。我真的没有更多方法可以告诉程序它可以为空。