sábado, 11 de junio de 2011

Otra forma de definir relaciones 1 a 1 en Doctrine 1.2 para Symfony

La mejor forma de definir relaciones 1:1 en doctrine 1.2 está descrita en el manual "Doctrine ORM for PHP" (pag. 71), pero hay otra forma de hacerlo y que tendrá un comportamiento ligeramente diferente. Esta es la configuración normal sugerida en el libro:

Email:
columns:
user_id: integer
address: string(150)
relations:
User:
local: user_id
foreign: id
foreignType: one

Si en cambio lo hacemos con esta configuración:

Email:
columns:
user_id: integer
address: string(150)
relations:
User:
local: user_id
foreign: id
type: one
owningSide: true

Obtendremos una relación 1:1 con la particularidad que cada que creemos un objeto User automáticamente symfony (o doctrine, no lo sé) intentará crear un objeto en Email. La mayoría de las veces esto va a resultar problemático, ya que muy probablemente generará errores e interrumpirá las transacciones que tengamos en proceso. Pero si el objeto de la clase 'hija' lo llenamos con valores por defecto o calculados mediante triggers este comportamiento 'extraño' es algo bueno. Debemos tener en cuenta que los campos permitan valores nulos para evitar errores por dejarlos vacíos.