Doctrine 2 エンティティの変更されたフィールドの特定
Doctrine 2 では、エンティティ フィールドへの変更を管理することは、データの整合性を確保するために重要です。これに対処するために、開発者は多くの場合、エンティティ内のどのフィールドが変更されたかを判断する必要に直面します。手動実装はオプションですが、Doctrine の組み込み機能を検討すると、このプロセスを簡素化できます。
EntityManager を使用した変更されたフィールドの取得
Doctrine は、$em 経由でアクセスできる EntityManager を提供します。 、変更されたフィールドを取得する効果的な方法を提供します。 getUnitOfWork メソッドを利用すると、以下のコード スニペットで $uow として指定されている DoctrineORMUnitOfWork にアクセスできます。
$entity = $em->find('My\Entity', 1); $uow = $em->getUnitOfWork();
変更セットの計算と取得
変更されたフィールドを表す変更セットを計算すると、computeChangeSets メソッドがトリガーされます。うわー。リスナー内にいる場合、この計算はオプションです。次に、getEntityChangeSet($entity):
$uow->computeChangeSets(); $changeset = $uow->getEntityChangeSet($entity);
を使用してエンティティに固有の変更セットを取得します。getEntityChangeSet メソッドを利用すると、キーが変更されたフィールド名を表すキーと値のペアを含む配列にアクセスできます。 、値は変更された値を表します。
キー考慮事項
preUpdate リスナー内でこのメソッドを利用する場合は、Doctrine がすでにこのタスクを実行しているため、変更セットの再計算を避けてください。代わりに、単に getEntityChangeSet を実行して、更新されたフィールドを取得します。
注意事項
Doctrine の通常の動作を妨げる可能性があるため、Doctrine イベント リスナーの外部でこのソリューションを使用することは避けてください。 。したがって、このアプローチは、イベント リスナー内の特定のシナリオに最適です。
以上がDoctrine 2 エンティティでどのフィールドが変更されたかを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。