Symfony / Doctrine - получить запись из конструктора сущности?

Используя 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)

Насколько я знаю, ChoiceType не взаимодействует с базой данных, может быть, вы ищете EntityType?

Iwan Wijaya 25.09.2018 06:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы ищете, может быть 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');
    },
));

Другие вопросы по теме