2011-05-11 11 views
6

En symfony 2.0, ¿cómo crear una lista desplegable utilizando la asociación de uno a uno en la forma? ¿Pueden poner buen ejemplo, por favor?Asociación uno a uno en la forma?

+0

¿Puede proporcionar más detalles sobre lo que quiere? – Riley

+0

Quiero crear un cuadro combinado de la tabla asociada de uno a uno. – Zeck

Respuesta

11

Voy a tratar de responder a su pregunta de la manera en que lo entiendo. Supongamos que tengo un objeto Faculty vinculado a un solo objeto University. Entonces, en la forma utilizada para crear o editar una facultad, muestro un cuadro combinado de toda la universidad en la base de datos y el usuario elige uno entre ellos. Hay un tipo de campo especial de Symfony que hace exactamente esto: el tipo de entidad. A continuación se muestra el código del método buildForm que yo uso en mi objeto FacultyType utilizado para crear la forma de la facultad:

// Application\AcmeBundle\Form\Type\FacultyType 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('name'); 
    $builder->add('university', 'entity', array(
     // The class of the entity used as a combo box item 
     'class' => 'AcmeBundle:University', 

     // The property of the entity displaying the entity as text 
     'property' => 'name', 

     // The query builder used to populate the combo box, accepts 
     // a QueryBuilder object or a \Closure like below 
     'query_builder' => function(EntityRepository $repository) { 
      // This will return a query builder selecting all universities 
      return $repository->createQueryBuilder('u'); 
     } 
    )); 
} 

Nota: Hay otras propiedades que se pueden establecer para el tipo de campo entidad, los invito a tomar un vistazo a este page para obtener más información al respecto.

Rendered, esto mostrará un cuadro combinado con todas las universidades que he establecido en la base de datos. Cuando el usuario guarda el formulario, la universidad elegida se asigna al objeto de la facultad vinculado al formulario a través de un colocador. Probablemente podría renderizar una lista desplegable en lugar de un cuadro combinado. Si necesita seleccionar varias entidades, la opción 'multiple' de la entidad de tipo de campo podría ser útil.

Dicho esto, el ejemplo que mostré no es una relación de uno a uno, sino más bien uno de varios para el objeto Faculty y uno de muchos para el objeto University. Una relación One-to-One sería algo más parecido a una relación donde University tiene un único Address. En este caso, un cuadro combinado no sería útil ya que la universidad solo puede tener una dirección, por lo que una subforma sería más apropiada. Si tiene muchas direcciones, se convierte en una relación Uno a Muchos como la relación entre la universidad y sus facultades.

No estoy seguro de si esto responderá a su pregunta correctamente, pero espero que lo conduzca a una solución final.

Saludos, Matt

Cuestiones relacionadas