2012-03-04 13 views
6

Mam trzy elementy, ChannelEntity -> MatchChannelEntity < - MatchEntity, MatchChannelEntity zapisuje wiele do wielu relacji między dwiema innymi tabelami, chcę formularz do listy wszystkich kanałów za pomocą pola wyboru, a jeśli mecz ma jeden z kanałów, pole wyboru tego kanału jest zaznaczone, w jaki sposób mogę to zrobić?Jak ustawić wiele do wielu form w Symfony2

Oto kod typu Postać:

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'); 
              },)) 

typu 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; 

będzie używać przykładu w celu wyjaśnienia, na przykład, że posiada trzy kanały: kanał A, kanał B i kanał C i jeden mecz: mecz M, mecz M ma jeden kanał A, relacja jest zapisana w tabeli match_channel, chcę, aby formularz dopasowania pokazywał wszystkie kanały, a kanał A jest sprawdzany, ponieważ jest własnością meczu M inne pozostaną niezaznaczone

+0

co potrzeba podmiotu typ pola: http://symfony.com/doc/current/reference/forms/types/entity.html – Nanocom

+0

Używam typ pola podmiotu, ale moja sytuacja jest o wiele bardziej skomplikowana, chcę tylko wyświetlić listę wszystkich kanałów z tabeli kanałów i sprawdzić te (zapisane w tabeli match_channel), które posiada. – imikay

+0

Możesz pobrać kanały z tabeli kanałów w ramach definicji typu pola, sprawdź mój link. W każdym razie, jeśli chcesz uzyskać szczegółową odpowiedź, zdecydowanie musisz pokazać kod i szczegółowo wyjaśnić swój problem. – Nanocom

Odpowiedz

6

OK, zamknę to pytanie. To dlatego, że ustawiłem wiele do wielu relacji między dwiema tablicami błędnie, a poprawna droga jest następująca (trochę trymowałem kod):

Wiele do wielu: Jeden mecz ma wiele kanałów i jeden kanał ma wiele mecze.

meczów:

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

Kanał:

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

Doctrine automatycznie utworzy tabelę krzyżową odniesienia dla ciebie, nazwanych MatchChannels. Uwaga na annonację JoinTable jest bardzo ważna.

Po zakończeniu można łatwo utworzyć wiele do wielu postaci, tak jak tworzy się inny typ formularzy/pól.

+0

W końcu znalazłem obejście tego problemu. Możesz zajrzeć do kodu źródłowego http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html – PMoubed

Powiązane problemy