Редактировать отношения многие ко многим в Symfony2 - PullRequest
0 голосов
/ 23 декабря 2011

Я использую Symfony2 с Doctrine и хочу изменить отношение между двумя таблицами, представленными промежуточной таблицей. Структура выглядит так:

Entity Tour хранится в настольном туре

Тег сущности, хранящийся в табличных тегах

У меня есть средняя таблица tour_tags для хранения двух индексов в строке: tour_id, tag_id.

А определение сущности выглядит следующим образом:

/**
 * @ORM\Table(name="tour")
 * @ORM\Entity
 */
Tour {
  /**
   * @ORM\ManyToMany(targetEntity="Tag")
   * @ORM\JoinTable(name="tour_tags",
   *     joinColumns={@ORM\JoinColumn(name="tour_id", referencedColumnName="id")},
   *     inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
   *     )
   */
  private $tags;

  ...
}

/**
 * @ORM\Table(name="tags")
 * @ORM\Entity
 */
class Tag {
  ...
}

Как видите, я не поместил никакой информации об отношениях в объекте Tag. Эта схема работает нормально при получении связанных данных, тегов для каждого тура и т. Д.

Но я хочу, чтобы пользователь мог редактировать информацию об отношениях с помощью флажков в форме тура. Я хочу включить в таблицу набор флажков, один для существующего тега. С этим документом http://symfony.com/doc/current/cookbook/form/form_collections.html можно редактировать имена тегов из формы тура:

/* The tour form */
Class TourType {
  public function buildForm(FormBuilder $builder, array $options) {
    ...
    $builder->add('tags', 'collection', array('type' => new TourTagsType()));
  }
}

но не создавать и не удалять отношения (таблица tour_tags).

Я ищу способ внедрить отношение (tour_tag) в форму, чтобы флажки отображались, если в таблице есть строка tour_id, tag_id.

1 Ответ

0 голосов
/ 28 февраля 2012

Добавьте в свой класс Tour этот конструктор:

public function __construct() {
  $this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}

А в вашем TourType:

$builder->add('tags', 'entity',  array(
                'class' => 'YourBundle:Tag',
                'expanded' => true,
                'multiple'  => true
            ))
...