2013-03-30 1 views
23

symfony2.1プロジェクトでdoctrine2を使用しています。私は他のテーブルと多少の関係を持つ実体を持っています。これらの多対1の外部キーの関係は、データベース内ですでに更新されていますが、移行を実行するたびに更新されます。diffまたはschema:update --dump-sql外部キー関係を再度追加するために同じ更新コマンドを追加します。私がスキーマを実行するとき:それは私のマッピングが私のデータベースと同期していないことを確認します。Doctrine2の移行を停止する方法:データベースに既に存在する外部キーの関係を常に追加するのではなく、

アプリケーションが正常に動作し、リレーションシップが正常に動作していて、データベースのスキーマが正しいように見えます。なぜドクトリンはこれらの外部キーを追加しようとしていますか?ここで

は(問題のあるパラメータの1つに)私のコードです:私は私の「チケット」の実体で

/** 
* Authenticated User who scored the ticket. 
* 
* @ORM\ManyToOne(targetEntity="CS\SecurityBundle\Entity\User") 
* @ORM\JoinColumn(name="scoring_user_id", referencedColumnName="id") 
*/ 
protected $scoringUser; 

私は現在、それはそうそこに、一方向のように設定していますUserエンティティではinversedByはありません。それがデータベースにすでにだにもかかわらず、更新ダンプ:

は、これは私の移行またはスキーマに次のように生成

$this->addSql("ALTER TABLE tickets ADD CONSTRAINT FK_54469DF4BB0D9452 FOREIGN KEY (scoring_user_id) REFERENCES users (id)"); 

任意のアイデアは、私がここで間違って何をやっていますか?

+2

1)データベースは、その制約があることを確認し、2)教義 – meze

+1

おかげMezeのをアップグレードしよう。問題は、データベースがINNODBを使用していないため、制約を設定できないということです。 (私が正しく理解している場合)。教義をどのようにして拘束を設定しようとしないかについての考えはありますか?これは同様の質問と思われる:http://stackoverflow.com/questions/12156775/does-doctrine-2-required-foreign-keys-to-be-defined – cjewby

+0

あなたは '@Table(name =" table_name " 、options = {"engine" = "MyISAM"}) 'または使用しているエンジンは何ですか? – cheesemacfly

答えて

8

なぜこれらの外部キーを追加しようとしているのですか?

正しい用語は「外部キー制約」です。制約がなければ、問題の列は単なる列にすぎません。これは、その列の値が別の表の主キーとして存在するように強制する制約です。

なぜこれらの外部キーを追加しようとしているのですか?

データベースのベンダー/エンジンは外部キー制約をサポートしていないため、Doctrineがそれを認識できないためです。

私が推測しなければならないのは、MyISAMエンジンでMySQLを使用していることです。 MyISAMは外部キー制約をサポートしていません。残念なことにDoctrineはそれを見るには「スマート」ではありません。 MySQLが使用されていることが分かります。そのため、外部キーの制約がサポートされていると盲目的に想定しています。

MyISAMを使用する正当な理由がない限り、InnoDBエンジンに切り替えることをお勧めします。

ALTER TABLE table_name ENGINE=InnoDB; 

Converting Tables from MyISAM to InnoDB

+1

これは起こっていたことですが、私はMyISAMの利点についてもっと学んだ後でInnoDBに切り替えることになりました。 – cjewby

+0

申し訳ありませんが、upvoteでは不十分です。あなたの答えは私の命を救った! **ありがとう** – Maurice

+0

@cjewby InnoDBは確かにMyISAMに比べて多くの利点を持っていますが、MyISAMが望ましい場合があります(私の答えでは「あなたが良い理由がない限り」です)。 –

関連する問題