Как настроить форму «многие ко многим» в Symfony2 - PullRequest
7 голосов
/ 04 марта 2012

У меня есть три объекта: ChannelEntity -> MatchChannelEntity <- MatchEntity, MatchChannelEntity сохраняет отношения многие ко многим между двумя другими таблицами, я хочу, чтобы в форме были перечислены все каналы с использованием флажков, и если для соответствия есть один из каналы, флажок этого канала установлен, как я могу это сделать? </p>

Вот код типа формы:

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

Тип 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;

Я буду использовать пример для объяснения, скажем, у меня есть три канала: канал A, канал B и канал C, и одно совпадение: совпадение M, совпадение M имеет один канал A, это отношение сохраняется в таблице match_channel , Я хочу, чтобы в форме совпадения были показаны все каналы, а канал A проверен, потому что он принадлежит совпадению M, другие остаются без проверки

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

Хорошо, я закрою этот вопрос.Это потому, что я неправильно установил отношение «многие ко многим» между двумя таблицами, и правильный путь следующий (я немного обрезал код):

Много ко многим: одно совпадение имеет много каналов и один каналимеет много совпадений.

Совпадение:

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

Канал:

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

Doctrine автоматически создаст для вас таблицу перекрестных ссылок с именем MatchChannels.Обратите внимание на аннотацию JoinTable , это очень важно.

И когда вы закончите, вы можете легко создать форму многие ко многим, точно так же, как вы создаете формы / поля другого типа.

1 голос
/ 04 июля 2012

Я наконец нашел решение для этого. Вы можете посмотреть в исходный код http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...