私が直面している問題は、私が強制することができないということです。doctrineは新しいオブジェクトの新しいIDを発行します。例えば:Doctrine:idsを一意に保つにはどうすればいいですか?
/**
* Something
*
* @ORM\Table(name="something")
* @ORM\Entity
*/
class Something
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
}
は明らかに固有のIDを生成する - しかし、オブジェクトが後に削除される場合、そのIDは、後で生成されたオブジェクトのために使用されるであろう。不幸なことに、このIDを参照するリンクの周りにリンクが存在する可能性があります。このIDは、単に失敗するのではなく間違ったオブジェクトを指しています。
のdoctrineをデータベースに直接接続しないで作業している場合、私はautoincrement
を使用していて、期待どおりに動作していました。ただし、のdoctrineを使用してテーブルを管理すると、これはうまくいかないようです。
strategy="UUID"
を使用すると便利ですが、しばしばより良い選択ですが、時にはこれが実現できません。たとえば、バンドルFOSUserBundleは、ユーザーのIDの整数に依存しているようです。これは、基本的には、a)ユーザーを決して削除せず、単に非アクティブにすること、またはb)別のid/keyを追加することです。
新しい整数IDを強制できますか?しかし、本番サーバー - 現在、OS X上でのsymfony 3.1.2内のsqliteと教義2.5.4を使用して
(。代わりにいいだろうが、私はそれが到達してないと思うFOSBundle使用UUID
を作るための方法) Linuxベースです。 PHP 7.0で動作します。
これは私が思ったことです。ただ追加されません。私はおそらく、手動でテーブルを変更することができますが、後でdoctrine:schema:updateを実行した後、ある時点で再び破棄されます。 :/ – Eiko
私はちょうどdoctrine2のコード、特に/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SqlitePlatform.phpを見てきました。本当に 'strategy =" IDENTITY "'は何もしませんDoctrineのドキュメントとは対照的に、sqliteの 'AUTOINCREMENT'機能の使用は... sqliteのバグのようです。 –
GitHubには既に問題があります:https://github.com/doctrine/dbal/issues/2426 –