Symfony-简单的数组和形式

时间:2020-02-22 10:51:26

标签: symfony doctrine symfony-3.4

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

  • UserEntity
  • ProductEntity

在ProductEntity中:

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

/**
 * Set groupexperts
 *
 * @param array $groupexperts
 *
 * @return Product
 */
public function setGroupexperts($groupexperts)
{
    $this->groupexperts = $groupexperts;

    return $this;
}

/**
 * Get groupexperts
 *
 * @return array
 */
public function getGroupexperts()
{
    return $this->groupexperts;
}

例如,数据库中的列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列表中选择一个或多个用户。但默认情况下未选择BUT用户#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数组之间建立映射?

1 个答案:

答案 0 :(得分:1)

我认为您需要配置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