2015-06-29 17 views
6

sto trovando un'entità dal suo PK come segue:Come posso verificare se l'oggetto è stato trovato in un repository Doctrine2?

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

Qual è il modo giusto per verificare se $ent è un vero e proprio oggetto rappresentante o no? Quello che intendo con reale è che $ent attualmente esiste su DB e che è stato restituito poiché sto pianificando di utilizzare gli stessi risultati per INSERT e UPDATE. In pseudo-codice ciò che è sulla mia testa è:

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

stavo pensando in uso is_object() o anche instanceof ma non sono sicuro se lo farà il lavoro o se $ent sarà un oggetto, anche se rappresentante doesn' esiste sul DB Qualche consiglio su questo? Come posso riuscirci?

+0

devo perdere qualcosa perché il mio modo di vedere, sia l'oggetto esiste in DB e trovare ($ id) troverò, e sarà un oggetto rappresentante o restituirà null se non trovato. Non credo ci sia bisogno di controllare il tipo dell'oggetto ... –

+0

@GuillaumeFache Quindi stai dicendo che il modo giusto dovrebbe essere semplicemente qualcosa come '! $ Ent' o' $ ent! == null' su il condizionale? Quella? – ReynierPM

+1

Le query predefinite di Doctrine dovrebbero restituire null se l'oggetto non è stato trovato nel database. Se il tuo problema è se l'oggetto nel database sia o meno valido devi consultare la convalida https://symfony.com/doc/current/book/validation.html – Squeegy

risposta

13

EntityRepository::find() metodo (che si utilizza) restituisce un object o null se l'oggetto non è stato trovato nel database. Tutte le seguenti condizioni sono valide:

if ($entity) { 
} 

if (null !== $entity) { 
} 

if ($entity instanceof Representative) { 
} 

Scegliere quello più adatto alle norme di codifica e utilizzarlo in modo coerente.

Se non è necessario creare un nuovo oggetto se non è stato trovato, è meglio lanciare un'eccezione e gestirla in modo appropriato.

+0

In effetti avrò bisogno di creare un nuovo oggetto, per favore se puoi dare un'occhiata a [questo altro post] (http://stackoverflow.com/questions/31116297/how-to-right-insert -o-update-on-same-doctrine2-object) che ha qualche relazione con questo e thx per la tua risposta – ReynierPM

2

ne dite di questo:

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

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

Fonte: click me