2012-03-04 74 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