有没有办法强制ManyToMany关系表现为ManyToOne?

时间:2016-01-29 20:30:11

标签: php symfony symfony-forms symfony-2.8

我有两个实体CommandPredetermined,它们与ManyToMany相关:

class Command
{
    use IdentifierAutogeneratedTrait;
    use TimestampableEntity;
    use ActiveTrait;

    /**
     * @var string
     * @ORM\Column(type="string", length=150)
     */
    private $name;

    /**
     * @var string
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @var Predetermined[]
     * @ORM\ManyToMany(targetEntity="Predetermined", mappedBy="commands", cascade={"persist"})
     */
    private $predetermined;

    ...
}

class Predetermined
{
    use IdentifierAutogeneratedTrait;
    use TimestampableEntity;
    use ActiveTrait;

    /**
     * @var string
     * @ORM\Column(type="string", length=160)
     * @Assert\NotBlank()
     */
    private $smsText;

    /**
     * @var Command[]
     * @ORM\ManyToMany(targetEntity="Command", inversedBy="predetermined", cascade={"persist", "remove"})
     * @ORM\JoinTable(name="predetermined_has_command")
     */
    private $commands;

    ...
}

有没有办法,使用表格(我在这里看到的唯一一个)来改变他们的行为方式?看看下面的图片:

2016-01-27_22-57-56

我允许在这里选择许多命令,这就是我使用ManyToMany但......

的原因

2016-01-27_22-58-11

在这个我没有,所以我仍然需要使用相同的实体,但改变表单级别的行为。可以给我一些帮助吗?我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

通常使用FormBuilder字段中的multiple属性,例如

$builder->add('commands', 'entity', array(
    'class'     => 'YourBundle:Command',
    'multiple'  => yourCondition ? true : false,
));

我已经从PR找到了EasyAdminBundle方式,您应该能够使用以下内容

// app/config/admin/entities/YourEntity
fields:
    - { property: 'commands', multiple: false }

对于一个表单,并将其设置为false以表示另一个表单 或者您可以定义一个参数:

- { property: 'commands', multiple: %condition% }