2017-02-15 26 views
1

Я пытаюсь поймать исключение во время выполнения:

try { 
    $em->remove($education); 
    $em->flush(); 
} catch(PDOException $e) { 
    var_dump($e->getMessage()); 
    die; 
} 

Я также попытался \Exception и \Doctrine\ORM\ORMException, но ни один из них не работал.

Вместо демпинг сообщения исключений я получаю ту же ошибку, я стараюсь, чтобы избежать ловли исключение:

[3/3] ForeignKeyConstraintViolationException: произошло исключение во время выполнения? DELETE FROM trainee_education WHERE ID = ' с PARAMS [2]:

SQLSTATE [23000]: Integrity нарушение ограничения: 1451 Не удается удалить или обновление родительской строки: ограничение внешнего ключа не удается (trainingexperienceinternship, скованность FK_10D1B00C2CA1BD71 FOREIGN KEY (education_id) Лит. trainee_education (id))

Я не знаю, почему мое ограничение не удается, ничего нового. Но я хотел бы получить исключение, чтобы я мог сообщить пользователю, что он не может удалить объект, он использовал его раньше, чтобы создать отношения.

+0

Исключения говорят, что это имя 'ForeignKeyConstraintViolationException' не' PDOException', вы уверены, что первый расширяет второе? вы должны попытаться поймать 'ForeignKeyConstraintViolationException' и посмотреть. Или, конечно, попробуйте поймать Exception, тогда вы можете выяснить, какой класс был брошен как исключение – smarber

+0

@smarber \ Exception тоже не работал, поэтому я задал здесь вопрос. УБЕДИТЕСЬ, ЧТОБЫ ВСТАВИТЬ Я попробую его и дам вам знать. –

ответ

4

У меня такая же ситуация, но я работаю с \ Doctrine \ DBAL \ DBALException

try{ 

     $em->persist($question); 
     $em->flush(); 
} catch (\Doctrine\DBAL\DBALException $e) { 

     $exception_message = $e->getPrevious()->getCode(); 
    return $this->render('AppBundle:Errors:error.html.twig', array('error' => $exception_message)); 

} 

Я не знаю, если это лучшее решение, но работает.

+0

Это прекрасно работает, спасибо! –