2017-03-27 6 views
1

私はデータベースに永続しているときに、すべての不完全なエントリをスキップしたいと思います。Symfony Doctrine - em flushでの間違ったエントリをスキップ

コードは次のようになります。

... 
processing a lot of data 
... 
foreach($data as $d){ 
    $entity = new Entity(); 
    $entity->setTitle($d['title']); 
    $entity->setDescription($d['description']); 
    $em->persist($entity); 
} 

$em->flush($entity); 

は今、私はいつもその方法ではありません255文字、下にタイトルを必要としています。どういうわけかその実体を無視して他のすべてを流すことはできますか?

ありがとう

答えて

2

最も良い方法は、存続する前にエンティティを検証することです。

例:

... 
processing a lot of data 
... 
foreach($data as $d){ 
    $entity = new Entity(); 
    $entity->setTitle($d['title']); 
    $entity->setDescription($d['description']); 
    if($entity->isValid()) { 
     $em->persist($entity); 
    } 
} 

$em->flush(); 

別の方法は、エンティティを一つずつ持続し、/キャッチフラッシュを試してみることですが、あなたはパフォーマンスに負け

例:

... 
processing a lot of data 
... 
foreach($data as $d){ 
    $entity = new Entity(); 
    $entity->setTitle($d['title']); 
    $entity->setDescription($d['description']); 
    $em->persist($entity); 
    try{ 
     $em->flush(); 
    } catch(\Exception $e){ 
     //error 
    } 
    $em->detach($entity); 
} 
関連する問題