Объект против результата массива

В моем поисковый фильтр(FormBuilder) для возврата списка результатов фильтрации у меня есть форма с отношением к объекту (несколько флажков). Не работает. Я думаю, у меня проблема в моем хранилище, чтобы получить массив против результата объекта.

<?php

namespace AdminBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;

use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Validator\Constraints as Assert;

use AdminBundle\Entity\Products;
use AdminBundle\Form\ProductsType;

class ProductsController extends Controller
{
    /**
     * @Route("/", name = "homepage")
     */
    public function indexAction(Request $request)
    {
        $form = $this->createFormBuilder()
            ->add('category', 'entity', array(
               'class' => 'AdminBundle:Category',
               'label' => false,
               'choice_label' => 'name',
               'required' => false,
               'expanded' => true,
               'placeholder' => 'Tous',
               'multiple' => true
           ))

           // ...
       ;

Это мой репозиторий:

<?php

namespace AdminBundle\Repository;

class ProductsRepository extends \Doctrine\ORM\EntityRepository
{
    public function ListAll($data)
    {
        $query = $this->createQueryBuilder('a')->orderBy('a.updated','DESC');

        // CATEGORY
        if ($data['category'] !== null)
        {
            $query
                ->innerJoin('a.category', 'cat')
                ->andWhere('cat.id = :catid')
                ->setParameter('catid', $data['category'])
            ;

            /*
            $query
                ->leftJoin('a.category', 'category')
                ->setParameter('category', $data['category'])
            ;
            */
        }

        // ...
    }
}

Этот репозиторий работает только для одного выбора: multiple => false. Когда я устанавливаю multiple => true, я получаю нарушение SQL относительно объекта и массива.

Как я могу работать с репозиторием для нескольких флажков?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
107
1

Ответы 1

Вы должны использовать ChoiceType вместо entityType

class CategoryRepository extends \Doctrine\ORM\EntityRepository
{
public function getForSearch()
{
    $qb = $this->createQueryBuilder('category');

    $qb->orderBy('category.name');
    $query = $qb->getQuery();

    $results = $query->getResult();
    $categories = array();

    foreach ($results as $category) {
        $categories[$category->getName()] = $category->getId();
    }

    return $categories;
}

Поставить в известность

$categories = $em->getRepository(Category::class)->getForSearch();

 ->add('categories', ChoiceType::class, array(
            'choices' => $categories,
            'required' => false,
            'placeholder' => 'Select',
        ))

И в контроллере:

if ($search_form->isSubmitted() && $search_form->isValid()) {
        $data = $search_form->getData();
        $em->getRepository(Product::class)->ListAll($data);

Я также думаю, что мы можем использовать преобразователь данных, но я не знаю, как это сделать

мой объект - категория, как работать в моем репозитории

olivier toppin 11.06.2018 14:23

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' numero 2 'ORDER BY e0_.updated DESC' в строке 1

olivier toppin 11.06.2018 15:13

getForSearch или getForList?

olivier toppin 11.06.2018 15:53

продукты против продукта? тоже немного mystake, в форме choices => $ product, а после наверху $ products

olivier toppin 11.06.2018 16:48

я думаю, что есть проблема в скрипте для репозитория?

olivier toppin 12.06.2018 10:03

@oliviertoppin Я обновил свой ответ, потому что мне пришлось заменить продукты по категориям, извините за это

Jsenechal 12.06.2018 10:09

getRepository (Category :: class) vs getRepository ('AdminBundle: category'), что лучше всего?

olivier toppin 12.06.2018 10:38

@oliviertoppin это то же самое, Category :: Class, потому что у меня есть использование App \ Repo \ Category ... в верхней части файла

Jsenechal 12.06.2018 12:02

моя проблема, когда я запускаю, я вижу эту ошибку: Примечание: неопределенная переменная: em --- ошибка в этой строке: $ Categories = $ em-> getRepository (Category :: class) -> getForSearch ();

olivier toppin 12.06.2018 14:33

PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '8 ORDER BY e0_.updated DESC' в строке 1

olivier toppin 12.06.2018 15:12

он работает с этим: $ Categories = $ this-> getDoctrine () -> getManager () -> getRepository ('AdminBund‌ le: Category') -> getFo‌ rSearch (); но при выборе более двух вариантов он снижается ...

olivier toppin 12.06.2018 15:34

2 решения дают одинаковые проблемы. не работает с множественным выбором

olivier toppin 13.06.2018 09:06

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