2016-11-03 11 views
0

た後、私はこのようにサイレックスで教義を登録しています:サイレックスDoctrineは「EntityManagerが閉鎖され、」教義例外

// Doctrine 
    $this->register(new DoctrineServiceProvider(), array(
     'db.options' => $this['config']['doctrine']['db.options'] 
    )); 
    $this->register(new DoctrineOrmServiceProvider()); 
    $this['orm.em.options'] = $this['config']['doctrine']['orm.em.options']; 

私は、重複した行を挿入した場合、私はこの例外を取得:

整合性制約違反:1062重複エントリ

try/catchを使用してこの例外をキャッチしました。後でDoctrineを再度使用しようとすると、この例外は常に表示されます。

EntityManagerが閉じられています。

私は、これらのステップ(The EntityManager is closed)以下のEntityManagerをリロードしてみた場合:

if (!$app['orm.em']->isOpen()) { 
     $app['orm.em'] = $app['orm.em']->create(
       $app['orm.em']->getConnection(), $app['orm.em']->getConfiguration(), $app['orm.em']->getEventManager() 
     ); 
    } 

しかし、今、この例外が示されています:

は、フリーズしたサービス "orm.em"

をオーバーライドすることはできません

Doctrine例外がhaの後にSilexでDoctrineプロバイダを使用するにはどうすればよいですかぼんやりした?

ありがとうございました。

+0

できません。マネージャーは、例外の後に設計によって閉じられます。この種の例外の後で実際にデータベースにアクセスする必要がある場合は、2つのエンティティ・マネージャを作成し、1つを例外の後にクリーン・アップに使用します。それ以外の場合は、リダイレクトして移動します。 – Cerad

+0

[EntityManagerがクローズされている]の可能な複製(http://stackoverflow.com/questions/14258591/the-entitymanager-isclosed) – olibiaz

+0

レコードが存在するかどうかをチェックして、存在しない場合にのみデータを挿入します記録。 – sonam

答えて

0

凍った状態から取り除くことができます。そして、新しいEntityManagerを作成します。

$manager = $app['orm.em']; 
$app->offsetUnset('orm.em'); 
$app->offsetSet('orm.em', $manager->create($manager->getConnection(), $manager->getConfiguration()));