Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使用多通关系作为符号形式的多项选择(带原则)_Symfony_One To Many_Symfony Forms_Many To One - Fatal编程技术网

Symfony 使用多通关系作为符号形式的多项选择(带原则)

Symfony 使用多通关系作为符号形式的多项选择(带原则),symfony,one-to-many,symfony-forms,many-to-one,Symfony,One To Many,Symfony Forms,Many To One,比如说,有一个简单的多对一关系:模型有头发类型和眼睛颜色: /** * @ORM\Entity */ class Model { /** * @ORM\ManyToOne(targetEntity="Hair") * @ORM\JoinColumn(name="hair_id", referencedColumnName="id") */ protected $hair; /** * @ORM\ManyToOne(target

比如说,有一个简单的多对一关系:模型有头发类型和眼睛颜色:

/**
 * @ORM\Entity
 */
class Model
{
    /**
     * @ORM\ManyToOne(targetEntity="Hair")
     * @ORM\JoinColumn(name="hair_id", referencedColumnName="id")
     */
    protected $hair;

    /**
     * @ORM\ManyToOne(targetEntity="Eyes")
     * @ORM\JoinColumn(name="eyes_id", referencedColumnName="id")
     */
    protected $eyes;
例如,头发可以是:金色、棕色、黑色、红色

眼睛:蓝色,绿色,灰色,棕色

在搜索表单中,我希望用户能够同时选择多种头发类型和眼睛。我使用“多重”属性:

class ModelType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('hair', EntityType::class, [
                'class' => 'AppBundle:Hair',
                'choice_label' => 'name',
                'multiple' => true,
            ])
            ->add('eyes', EntityType::class, [
                'class' => 'AppBundle:Eyes',
                'choice_label' => 'name',
                'multiple' => true,
            ])
            ->getForm();
       ;
}
表单呈现如下所示:

当然,选择多个值并提交时会导致错误:

Expected argument of type "AppBundle\Entity\Hair", "Doctrine\Common\Collections\ArrayCollection" given
也许,这不是在这种情况下使用的


在Symfony中构建搜索表单有什么最佳实践吗?没有发现任何…

模型可以有多种头发颜色和多种眼睛颜色

在这种情况下,您必须使用
多对多
关系,而不是
多对一


如果没有,则必须删除
'multiple'=>true,
模型类型中的

问题不在于表单,而在于映射

我假设您的表单与模型实体绑定。 这就是为什么多通关系只接受一个相关实体的原因

解决方案

不要将表单绑定到模型实体,只需使用不带类的表单:


这只是当我们想要编辑相关实体时。他可以使用entitytype。我的答案不适合我更改的问题:)你的新答案也是我第一次尝试:)。但现在我看到它是一个搜索表单;)“在搜索表单中,我希望用户能够同时选择多种头发类型和眼睛”是的,我看到了,哈哈,你是对的。表单与模型实体绑定,这不是合适的解决方案。只有当表单操纵某个实体时,才必须将其绑定到该实体。尽管搜索表单使用相关实体(查找它们),但对于这些实体来说,它是第三方功能。所以不应该直接映射到它。