そのため、このプロジェクトはいくつかの直接的な PDO SQL クエリ (MySQL を使用) を Doctrine に移行しています。テーブルは既に存在し、データが含まれていました。エンティティをセットアップすると、すべてが黄金色に見えました。すべてのクエリは Doctrine の Entity Manager で書き直され、すべてが機能しているように見えました。
ただし、エンティティの 1 つの 3 つのフィールドが null 可能である必要があることを忘れていました。それらはデータベースで NOT NULL に設定され、Doctrine アノテーションに nullable=true 宣言がありませんでした。
フィールドをnull可能にするために手動でMySQLのテーブルに変更し、nullable = trueをエンティティに追加し、キャッシュをクリアして実行しました
php app/console doctrine:schema:update --force
念のため(正しく実行されました)。
ただし、Doctrine エンティティが null フィールドを許可し、データベースにも null 可能な列があるにもかかわらず、次のエラーが発生します。
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 になる可能性があることをプログラムに伝える方法はもうありません。