Symfony-简单的数组和形式

问题描述 投票:0回答:1

我正在运行Symfony 3.4 LTS。在我的实体中,我得到了:

  • UserEntity
  • ProductEntity

在ProductEntity中:

/**
 * @var array
 *
 * @ORM\Column(name="experts", type="simple_array")
 */
private $experts;

例如,数据库中的experts列可能是[2,7,9],其中#2,#7和#9以及被视为相关产品专家的用户ID。在我的ProductForm中:

$builder->add('experts', EntityType::class, array(
    'class' => 'AppBundle:User',
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('u')
        ->orderBy('u.username', 'ASC')
        ->andWhere('u.active = 1')
    },
    'choice_label' => function($user) {
        return $user->getFirstname();
    }
));

我不想建立ManyToMany关系,因为我不想另一个SQL表。该表单在前端显示良好,访问者可以在HTML列表中选择一个或多个用户。但是用户#2,#7和#9 默认情况下未选择

生成的select列表看起来不错,ID好:

<select>
    <option value="1">John</option>
    <option value="2">Matthew</option>
    <option value="3">Brad</option>
    <option value="4">Georges</option>
    <option value="5">Luke</option>
    ...
</select>

如何在用户列表(由createQueryBuilder()生成)和数据库中存储的用户ID数组之间建立映射?

symfony doctrine symfony-3.4
1个回答
0
投票

我认为您需要配置choice_value选项以返回实体ID。 EntityType的默认选择值为实体对象,但您只需要id。

'choice_value' => function (?UserEntity $user) {
    return $user ? $user->getId() : '';
},

https://symfony.com/doc/3.4/reference/forms/types/entity.html#choice-value

© www.soinside.com 2019 - 2024. All rights reserved.