Используя Symfony 4, я просматриваю документацию по choicetype здесь и вижу это
use App\Entity\Category;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...
$builder->add('category', ChoiceType::class, [
'choices' => [
new Category('Cat1'),
new Category('Cat2'),
new Category('Cat3'),
new Category('Cat4'),
],
Я предполагаю, что, вызвав new Category('Cat1'), он в основном выполнит поиск в базе данных этой записи на основе чего-то вроде поля имени.
Как это сделать в конструкторе Entity? К сожалению, я не вижу документации о том, как это сделать? Или это просто создание новой категории (хотя я не понимаю, как это будет работать, поскольку без поиска будет отсутствовать идентификатор базы данных)?
В основном у меня есть следующее:
Employee Table
- employee_id
Employee Roles Table
- employee_id
- role_id
Roles Table
- role_id
Таким образом, у одного сотрудника может быть много ролей. Для этого я использую таблицу сопоставления. Мне нужен тип выбора, который дает мне все роли (все записи из таблицы ролей), а затем выбирает те, которые находятся в таблице сопоставления (роли сотрудников, где employee_id = x)






То, что вы ищете, может быть https://symfony.com/doc/current/reference/forms/types/entity.html
EntityType действительно получает записи из базы данных (доктрина). Вы можете использовать опцию query_builder, чтобы изменить запрос в соответствии с вашими потребностями:
https://symfony.com/doc/current/reference/forms/types/entity.html#query-builder
Это будет выглядеть так, если вы хотите ограничить выбор активными (пример):
use App\Entity\Category;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// ...
$builder->add('category', EntityType::class, array(
'class' => Category::class,
'choice_label' => 'displayName', // property to use as the option value
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->where('c.active = 1');
},
));
Насколько я знаю, ChoiceType не взаимодействует с базой данных, может быть, вы ищете EntityType?