forループを使用して処理しているデータソースがあります。データソースに重複があることがあります。私はデータソースをループして「アイテム」エンティティを作成しています。私はそれらの重複を避けようとしていますが、アイテムはデータベースに送られていないので、重複チェック中に見つからないと思います。エンティティマネージャがフラッシュされる前に、forループで重複がないか確認してください。
はここでループのための私の擬似です:
foreach($datasource['data'] as $post){
$dupe = $em->getRepository('AppBundle:Item')->findOneByDatasourceId($post['id']);
if(!$dupe){
//process the item
$item = new Item();
$item->setDatasourceId($post['id']);
$em->persist($item);
}
}
$em->flush();
これは、重複を見つけるん。
データがまだデータベースに送信されていない場合、重複を見つけるにはどうすればよいですか?私は、エンティティマネージャがまだプッシュされていないデータについて知っていたという印象を受けました。
ありがとう
あなたはフラッシュが後にあなたが重複を持って続けば?もちろん、最適化された解決策ではありませんが、インラインIDをローカルの一時配列に格納し、この配列にもチェックインできます。 – Matteo
@ Matteoのソリューションはパフォーマンスには最高だと思いますが、 'Item'エンティティで' UniqueEntity'制約を使用し、 'validator'サービスを使って' persist() 'の前に検証することができます。 – yceruto