2012-03-04 19 views
6

Tengo tres entidades, ChannelEntity -> MatchChannelEntity < - MatchEntity, MatchChannelEntity guarda las muchas a muchas relaciones entre las otras dos tablas, quiero un formulario para listar todos los canales usando casillas de verificación, y si una coincidencia tiene uno de los canales, se selecciona la casilla de verificación de ese canal, ¿cómo puedo hacer esto?Cómo configurar una forma de muchos a muchos en Symfony2

Aquí es el código de tipo físico:

class MatchhType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add('channels', 'entity', array('label' => 'Channels', 
              'class'   => 'Mikay\MikiBundle\Entity\Channel', 
              'multiple'  => true, 
              'expanded'  => true, 
              'query_builder' => function ($repository) 
              { 
              return $repository->createQueryBuilder('c')->orderBy('c.name', 'ASC'); 
              },)) 

El tipo MatchChannel:

class MatchChannel 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var integer $match_id 
    * @ORM\ManyToOne(targetEntity="Matchh", inversedBy="channels") 
    * @ORM\JoinColumn(name="match_id", referencedColumnName="id", nullable="true") 
    */ 
    private $match; 

    /** 
    * @var integer $channel_id 
    * 
    * @ORM\ManyToOne(targetEntity="Channel", inversedBy="mathces") 
    * @ORM\JoinColumn(name="channel_id", referencedColumnName="id", nullable="true") 
    */ 
    private $channel; 

voy a utilizar un ejemplo para explicar, por ejemplo, tengo tres canales: el canal A, canal B y canal C, y una coincidencia: partido M, la coincidencia M tiene un canal A, esta relación se guarda en la tabla match_channel, quiero que una forma de coincidencia muestre todos los canales, y el canal A se marca porque es propiedad de la coincidencia M , otros permanecen sin marcar

+0

Necesita el tipo de campo de entidad: http://symfony.com/doc/current/reference/forms/types/entity.html – Nanocom

+0

Estoy usando el tipo de campo de entidad, pero mi situación es mucho más compleja, lo que quiero es enumerar todos los canales de la tabla de canales y verificar los que están guardados en la tabla match_channel. – imikay

+0

Puede recuperar los canales de la tabla de canales dentro de su definición de tipo de campo, verifique mi enlace. De todos modos, definitivamente necesitas mostrar un código y explicar tu problema en detalle si quieres una respuesta detallada. – Nanocom

Respuesta

6

Ok, cerraré esta pregunta. Eso es porque configuré la relación de muchos a muchos entre las dos tablas mal, y la forma correcta es la siguiente (recorté un poco el código):

Muchos a muchos: un partido tiene muchos canales y un canal tiene muchos partidos.

partido:

class Match 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Channel", inversedBy="matches") 
    * @ORM\JoinTable(name="match_channels") 
    */ 
    private $channels; 

Canal:

class Channel 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Match", mappedBy="channels") 
    */ 
    private $matches;  

Doctrina creará automáticamente la tabla de referencias cruzadas para ti, MatchChannels con nombre. Tenga en cuenta que JoinTable anotación, es muy importante.

Y cuando lo haya hecho, puede crear una forma de muchos a muchos fácilmente, al igual que crea otro tipo de formularios/campos.

+0

Finalmente he encontrado una solución para esto. Puede consultar el código fuente http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html – PMoubed

Cuestiones relacionadas