2010-01-20 11 views
5

Estoy usando Symfony con Doctrine.Cómo saber si un objeto de una relación existe en la base de datos

que tienen dos clases definidas, persona y Estudiante, una relación uno a uno.

Cada estudiante está relacionado con una persona , pero no todos los persona tiene una relación con un estudiante .

Cuando llamo ...

$person->getStudent(); 

... siempre me dan y el objeto, sin tener en cuenta algunos persona 's no tiene un estudiante. ¿Cómo puedo saber que no existe (Student) en la base de datos?

Gracias.

Respuesta

9

creo

$person->getStudent()->exists(); 

debe hacerlo. Al menos según el Doctrine API documentation.
El objeto que obtienes es probablemente algún tipo de registro nulo.

+0

@Felix gracias! Pero sería mejor si devolviera un 'nulo' cuando no existe un registro ¿no es así? Gracias por tu ayuda. – kiewic

+0

@Kiewic: Sí, también tuve problemas con esto y esperaba un valor 'nulo' en lugar de un objeto. Si encuentra la respuesta útil, acéptela. –

2

Hay un método bastante nuevo (creo que desde Doctrine 1.2): $person->hasReference("Student"); devuelve un booleano para saber si realmente hay un Estudiante asociado a la persona, sin importar si ya se guardó o no en la base de datos, y sin crear un nuevo registro de Estudiante. Esta llamada puede ser adecuada en situaciones en las que la lógica de la aplicación no se preocupa por la persistencia del objeto relacionado, p. mientras que dentro de una transacción (supongo). Espero que ayude un poco, alegre, RAPHAEL

2

También puede utilizar Doctrine_Record::relatedExists(), que es una especie de complemento a hasReference()

que lo utilice como esto:

if ($person->relatedExists('Student')) 
+0

Sí, usar la forma '$ persona-> relatedExists ('Student')' es mucho mejor que hacer '$ persona-> Estudiante-> exists();' ya que este último creará un nuevo objeto "en blanco" en la memoria , adjúntelo a la '$ persona 'y lo insertará como una línea en blanco cuando/si llama a' $ persona-> guardar(); ' – Julien

Cuestiones relacionadas