我正在使用带有Doctrine的Symfony2,并希望编辑用中间表表示的两个表之间的关系。结构是这样的:
存储在表格中的实体游览
存储在表格标签中的实体标签
我有一个中间表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实体中添加任何关系信息。 这种模式可以很好地获取相关数据,每个游览的标签等等。
但我希望用户能够通过Tour表单中的复选框编辑关系信息。我想要包含一组复选框,一个用于表格中的现有标签。 使用此文档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()));
}
}
但不创建或删除关系(table tour_tags)。
我正在寻找一种在表单中嵌入关系(tour_tag)的方法,这样如果表格中有一个tour_id,tag_id行,则会显示复选框。
答案 0 :(得分:0)
在Tour类中,添加以下构造函数:
public function __construct() {
$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
在你的TourType中:
$builder->add('tags', 'entity', array(
'class' => 'YourBundle:Tag',
'expanded' => true,
'multiple' => true
))