Создайте форму категории с подкатегориями на Symfony

У меня есть две сущности: Категория и Подкатегория. Одна категория содержит 0 или несколько подкатегорий. Они связаны отношением "многие к одному". Я не представляю, как я могу сделать форму с подкатегориями, сгруппированными по категориям, вот так:

CATEGORY 1 :
- SubCategory 1
- SubCategory 2
CATEGORY 2:
- SubCategory 1
- SubCategory 2

Моя актуальная форма:

class CategorieType extends AbstractType
{
    /**
    * @param FormBuilderInterface $builder
    * @param array $options
    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('sous_categories', CollectionType::class, array(
                'entry_type' => SousCategorie::class,
                'entry_options' => array('label' => false),
            ))
        ;
    }

Спасибо за вашу помощь

Не могли бы вы подробнее рассказать, что вы хотите делать со своей формой? Это POST, PUT, вы просто хотите связать объекты?

Antoine Galluet 09.03.2018 16:51

У меня есть юридическая компания, которая связана с подкатегорией отношением "многие ко многим", поэтому я хочу добавить подкатегории к компании.

Florian Fish 09.03.2018 16:52

Используйте EntityType с опцией group_by symfony.com/doc/current/reference/forms/types/…

Laurynas Gerbutavicius 09.03.2018 23:22

Спасибо, вдруг получаю свои категории, но как парсер в веточке отображать подкатегории?

Florian Fish 12.03.2018 15:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
4
769
2

Ответы 2

Я делаю это в своей форме, я получаю подкатегории. Как показать их сгруппированными в поле по категориям?

$builder
        ->add('sous_categories', EntityType::class, array(
            'class'    => 'AppBundle:Bdd\SousCategorie',
            'query_builder' => function(EntityRepository $er) use ($revue) {
                return $er->createQueryBuilder('sc')
                    ->addSelect('sc')
                    ->join('sc.Categorie', 'c')
                    ->andWhere('c.Revue = :Revue')
                    ->setParameter('Revue', $revue)
                    ->orderBy('c.libelle', 'ASC')
                    ->addOrderBy('sc.libelle', 'ASC')
                ;
            },
            'choice_label' => function($sousCategorie){
                return $sousCategorie->getCategorie()->getLibelle()." - ".$sousCategorie->getLibelle();
            },
            'multiple' => true,
            'expanded' => true,
        ))
    ;

Вы можете использовать groupBy в своей функции репозитория:

$builder
        ->add('sous_categories', EntityType::class, array(
            'class'    => 'AppBundle:Bdd\SousCategorie',
            'query_builder' => function(EntityRepository $er) use ($revue) {
                return $er->createQueryBuilder('sc')
                    ->addSelect('sc')
                    ->join('sc.Categorie', 'c')
                    ->andWhere('c.Revue = :Revue')
                    ->setParameter('Revue', $revue)
                    ->orderBy('c.libelle', 'ASC')
                    ->addOrderBy('sc.libelle', 'ASC')
                    ->groupBy('sc.Categorie')
                ;
            },
            'choice_label' => function($sousCategorie){
                return $sousCategorie->getCategorie()->getLibelle()." - ".$sousCategorie->getLibelle();
            },
            'multiple' => true,
            'expanded' => true,
        ))
    ;

Привет, Антуан, я пробовал это, но теперь я получаю эту ошибку от mysql: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 Выражение № 1 списка SELECT не входит в предложение GROUP BY и содержит неагрегированный столбец fitadata.b0_.id который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by

Florian Fish 12.03.2018 09:15

J'ai réussi en desactivant le mode only_full_group_by (cipherbliss.com/…) mais par contre après comment afficher tout ca correctement dans twig?

Florian Fish 12.03.2018 09:42

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