В моем поисковый фильтр(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 относительно объекта и массива.
Как я могу работать с репозиторием для нескольких флажков?




Вы должны использовать 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);
Я также думаю, что мы можем использовать преобразователь данных, но я не знаю, как это сделать
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' numero 2 'ORDER BY e0_.updated DESC' в строке 1
getForSearch или getForList?
продукты против продукта? тоже немного mystake, в форме choices => $ product, а после наверху $ products
я думаю, что есть проблема в скрипте для репозитория?
@oliviertoppin Я обновил свой ответ, потому что мне пришлось заменить продукты по категориям, извините за это
getRepository (Category :: class) vs getRepository ('AdminBundle: category'), что лучше всего?
@oliviertoppin это то же самое, Category :: Class, потому что у меня есть использование App \ Repo \ Category ... в верхней части файла
моя проблема, когда я запускаю, я вижу эту ошибку: Примечание: неопределенная переменная: em --- ошибка в этой строке: $ Categories = $ em-> getRepository (Category :: class) -> getForSearch ();
PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '8 ORDER BY e0_.updated DESC' в строке 1
он работает с этим: $ Categories = $ this-> getDoctrine () -> getManager () -> getRepository ('AdminBund le: Category') -> getFo rSearch (); но при выборе более двух вариантов он снижается ...
2 решения дают одинаковые проблемы. не работает с множественным выбором
мой объект - категория, как работать в моем репозитории