Symfony - простой массив и форма - PullRequest
0 голосов
/ 22 февраля 2020

Я бегу 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 и идентификаторы пользователей считаются экспертами для соответствующего продукта. В моей 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()) и массивом идентификаторов пользователей, хранящимся в базе данных?

1 Ответ

0 голосов
/ 22 февраля 2020

Я думаю, вам нужно настроить параметр choice_value для возврата идентификатора объекта. Значением по умолчанию для EntityType является объект сущности, но вам нужен только идентификатор.

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

https://symfony.com/doc/3.4/reference/forms/types/entity.html#choice -значение

...