2012-03-04 49 views
6

我有三个实体,ChannelEntity - > MatchChannelEntity < - MatchEntity,MatchChannelEntity保存另外两个表格之间的多对多关系,我想要一个表单来列出所有使用的通道复选框,如果一个匹配有一个频道,该频道的复选框被选中,我该怎么做?如何在Symfony2中设置多对多的表格

下面是Form类型代码:

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 ,其他人保持不加抑制

+0

您需要实体字段类型:http://symfony.com/doc/current/reference/forms/types/entity.html – Nanocom 2012-03-04 11:24:54

+0

我正在使用实体字段类型,但我的情况要复杂得多,我想要列出频道表中的所有频道,并检查比赛拥有的频道(保存在match_channel表中)。 – imikay 2012-03-04 12:51:29

+0

您可以从字段类型定义中的频道表中检索频道,然后检查我的链接。无论如何,如果你想得到详细的答案,你肯定需要展示一些代码并详细解释你的问题。 – Nanocom 2012-03-04 13:58:10

回答

6

好的,我会解决这个问题。这是因为我在两张表之间建立了多对多的关系,并且正确的方法如下(我对代码进行了一些修改):

多对多:一个匹配有很多通道,一个通道有很多火柴。

比赛:

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;  

学说将自动创建交叉引用表给你,叫MatchChannels。 注意JoinTable annonation,这是非常重要的。

完成后,您可以轻松创建多对多的表单,就像创建其他类型的表单/字段一样。

+0

我终于找到了解决方法。您可以查看源代码http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html – PMoubed 2012-07-04 19:06:52