2

そのため、このプロジェクトはいくつかの直接的な 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 になる可能性があることをプログラムに伝える方法はもうありません。

4

1 に答える 1

3

こんにちは、まだ問題があるかどうかわかりません。

php app/console doctrine:schema:update --dump-sql モデルとデータベースの違いを知るために行うことができます。そして、彼があなたに言う行を適用します。

問題が解決すると思います

于 2013-12-30T13:07:12.303 に答える