nechin
@nechin
web backend developer

Как в комбобоксе формы убрать один из элементов?

Приветствую.

Есть entity
class Category
{
   ... 
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @var Category
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="children", cascade={"persist"})
     * @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE")
     * @ORM\Cache(usage="NONSTRICT_READ_WRITE")
     */
    private $parent;
   ...


Есть форма.
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'label' => "Категория",
            ])
            ->add('parent', EntityType::class, [
                'label' => "Родительская категория",
                "class" => Category::class,
                "choice_label" => "name",
                'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('c')
                        ->where('c.parent != :category')
                        ->setParameter('category', ???);
                }
            ]);
    }


Есть edit action.
public function editAction(Request $request, Category $category)
    {
        $editForm = $this->createForm('MyBundle\Form\CategoryType', $category);
        $editForm->handleRequest($request);

        if ($editForm->isSubmitted() && $editForm->isValid()) {
            ...
        }

        return $this->render...
    }


Собственно всё стандартно. При редактировании категории можно указать родительскую категорию. Но в этом списке появляется так же и редактируемая категория. Как в query_builder указать текущую (редактируемую категорию), чтобы исключить её из списка выбора?

Спасибо.
  • Вопрос задан
  • 317 просмотров
Решения вопроса 2
Austin_Powers
@Austin_Powers
Web developer (Symfony, Go, Vue.js)
Попробуйте в форме:
$entity = $builder->getData();

QueryBuilder:
'query_builder' => function(EntityRepository $er) use ($entity) {
                    return $er->createQueryBuilder('c')
                        ->where('c.parent != :category')
                        ->setParameter('category', $entity);
Ответ написан
e_svirsky
@e_svirsky
Web Developer
Передавайте в createForm параметр $options с текущей категорией. А уже внутри формы он будет доступен, сделайте проверку в queryBuilder-е.
https://stackoverflow.com/questions/34027711/passi...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы