2011-07-29 17 views
7

Estoy intentando crear una asignación OneToOne opcional en Doctrine.Doctrine Cartografía OneToOne opcional

Tengo una tabla con todas las ciudades y códigos postales disponibles (esta tabla no se debe cambiar), y tengo una tabla con direcciones y una ciudad mapeada. Pero a veces no quiero agregar Ciudad a mi Dirección al principio (tal vez más adelante). Pero cuando no agrego una ciudad a la dirección, la persistencia en la dirección me da una excepción de reflexión porque no hay ningún objeto como 'nulo', que debería ser el objeto de la ciudad.

No deseo agregar una ciudad vacía cada vez en la base de datos, porque no debería agregarse o eliminarse nada en la tabla de la ciudad.

¿Alguna sugerencia? ¿O qué me estoy perdiendo?

class Address{ 
/** 
* @OneToOne(targetEntity="City") 
* @JoinColumn(name="city_id", referencedColumnName="id") 
*/ 
    private $city = ''; 

Posibles soluciones que consideran:

  • Crear un objeto vacío de la ciudad en el PP y asigne esta siempre a objetos de dirección de nueva creación (que podría causar una gran cantidad de gastos generales)
  • Crear una La relación ManyToMany con una variedad de ciudades, por lo que puede haber cero o más ciudades agregadas (puedo restringir la multitud de ciudades en mi objeto Address) pero luego necesito una tabla de asignación ...

Respuesta

16

Simplemente añadir nullable=true a @JoinColumn anotación

+0

alguna manera de hacer este trabajo para un multi-columna de unión (es decir, @JoinColumns). Lo he intentado pero sin suerte ... –

+0

Desafortunadamente, genera la consulta INSERT INTO con un parámetro vacío y provoca un error: ''INSERT INTO message_conversation (title, lastMessage_id) VALUES (?,?)' Con params [43]' - the el segundo param (uno a uno) falta. – Athlan

+0

No funciona para mí. Agregué nullable = verdadero pero no éxito. ¿Hay alguna forma de hacer una relación uno a uno como opcional? – skonsoft

Cuestiones relacionadas