2015-06-29 11 views
6

Я найти сущность его ПК как следующие:Как проверить, найден ли объект в репозитории Doctrine2?

$ent = $em->getRepository('AppBundle:Representative')->find($id) 

Что такое правильный способ проверить $ent является ли реальным представителем объект или нет? То, что я имею в виду с real, состоит в том, что $ent в настоящее время существует в БД и был возвращен, так как я планирую использовать тот же результат для и UPDATE. В псевдо-коде, что на моей голове:

if (ent is Representative) 
{ 
    // Update its values 
} else { 
    // Create a new Representative 
} 

я думал в использовании is_object() или даже instanceof, но я не уверен, что они будут делать эту работу или если $ent будет объект, даже если представитель Безразлично» t существует в БД. Любые советы по этому поводу? Как я могу это достичь?

+0

Я должен пропустить что-то, потому что, как я вижу это, либо ваш объект существует в БД и найти ($ ID) найдет ее, и будет представительным объектом, или он возвращает null, если не найден. Я не думаю, что есть необходимость проверить тип объекта ... –

+0

@GuillaumeFache Итак, вы говорите, что правильный путь должен быть просто чем-то вроде '! $ Ent' или' $ ent! == null' on условный? Что? – ReynierPM

+1

Запросы Doctrine по умолчанию должны возвращать Null, если объект не найден в базе данных. Если ваша проблема в том, действительно ли объект в базе данных действителен, вы должны посмотреть на проверку https://symfony.com/doc/current/book/validation.html – Squeegy

ответ

13

EntityRepository::find() метод (который вы используете) возвращает object, или null, если объект не найден в базе данных. Все следующие условия справедливы:

if ($entity) { 
} 

if (null !== $entity) { 
} 

if ($entity instanceof Representative) { 
} 

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

Если вам не нужно создавать новый объект, если он не найден, лучше выбросьте исключение и обработайте его соответствующим образом.

+0

На самом деле мне нужно будет создать новый объект, пожалуйста, если вы можете взглянуть на [этот другой пост] (http://stackoverflow.com/questions/31116297/how-to-right-insert -or-update-on-same-doctrine2-object), который имеет некоторое отношение к этому, и thx для вашего ответа – ReynierPM

2

Как об этом:

$product = $this->getDoctrine() 
     ->getRepository('AppBundle:Product') 
     ->find($id); 

    if (!$product) { 
     throw $this->createNotFoundException(
      'No product found for id '.$id 
     ); 

Источник: click me