imi*_*kay 7 doctrine symfony-forms symfony doctrine-orm
我有三个实体,ChannelEntity - > MatchChannelEntity < - MatchEntity,MatchChannelEntity保存其他两个表之间的多对多关系,我希望表单使用复选框列出所有通道,如果匹配有一个通道,选中该频道的复选框,我该怎么做?
这是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');
},))
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
我将用一个例子来解释,比方说,我有三个通道:通道A,通道B和通道C,和一个匹配:匹配M,匹配M有一个通道A,这个关系保存在match_channel表中,我想要一个匹配表单显示所有频道,并检查频道A,因为它由比赛M拥有,其他人保持未选中状态
好的,我将结束这个问题.那是因为我将两个表之间的多对多关系设置为错误,正确的方法如下(我对代码进行了一些尝试):
多对多:一场比赛有很多频道,一场有很多场比赛.
比赛:
class Match
{
/**
* @ORM\ManyToMany(targetEntity="Channel", inversedBy="matches")
* @ORM\JoinTable(name="match_channels")
*/
private $channels;
Run Code Online (Sandbox Code Playgroud)
渠道:
class Channel
{
/**
* @ORM\ManyToMany(targetEntity="Match", mappedBy="channels")
*/
private $matches;
Run Code Online (Sandbox Code Playgroud)
Doctrine将自动为您创建交叉引用表,名为MatchChannels.注意JoinTable的声明,这非常重要.
完成后,您可以轻松创建多对多的表单,就像创建其他类型的表单/字段一样.
| 归档时间: |
|
| 查看次数: |
18055 次 |
| 最近记录: |