因此,该项目正在将一些直接的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。
答案 0 :(得分:3)
嗨,我不知道你是否还有问题。
你可以做php app/console doctrine:schema:update --dump-sql
为了了解您的模型和数据库之间的差异。
并应用他会告诉你的那条线。
我认为它会解决问题