2013-08-06 4 views
0

Привет, я пытаюсь использовать ParamConverter, чтобы получить несколько строк из базы данных, но профайлер показать запрос с limi 1. Можно ли получить его как тоПолучение нескольких строк с помощью ParamConverter

/** 
* @Route("/localization/{code}", name="pkt-index") 
* @ParamConverter("localizations", class="PriceBundle:Localization") 
*/ 

после ввода localization/0003 я должен получить более 100 строк.

EDIT: Я использовал repository_method вариант и

/* 
* @Route("/localization/{id}", name="pkt-index") 
* @ParamConverter("localizations", class="PriceBundle:Localization", options={ 
* "repository_method": "getByLocalizationCode" 
* }) 
*/ 

но самое смешное, что когда я изменяю {id} в маршрут не работает он бросает и исключение SQLSTATE[HY093]: Invalid parameter number: parameter was not defined даже если переменная существует в класс сущности, если переменная не существует, она выбрасывает Unable to guess how to get a Doctrine instance from the request information.

ОБЪЯСНЕНИЯ

при изменении {id} в маршруте не работает он бросает и исключения SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Вот я думаю, что Symfony протекторов id как первичный ключ и в качестве параметра метода репозитория проходит string когда Я изменил это id на что-то еще, что он прошел array

Пример

/** 
* @Route("/localization/{id}", name="pkt-index") 
*/ 

передача string методу

/** 
* @Route("/localization/{code}/{name}", name="pkt-index") 
*/ 

удар array методу

array(
    'code' => 003 
    'name' => localization_name 
) 

и последний

/** 
* @Route("/localization/{id}/{name}", name="pkt-index") 
*/ 

будет проходить string идентификатор опустить имя

Надеюсь, это звучит разумно.

ответ

0

ParamConverter В настоящее время можно извлекать только id из запроса и находить одну сущность из db. Посмотрите на DoctrineParamConverter код. Но вы можете указать свой own param converter с некоторой дополнительной логикой.

+0

это значит ParamConverter никогда не будет работать внутри функции сеттер Entity? – userfuser

1

Ответ забытогобаза не совсем прав. @ParamConverter сначала попытается найти один объект по идентификатору ...

... затем попытаться match the route variables against db columns найти объект ... , но по существу это будет конвертировать только один объект за раз.

Если вы все еще хотите использовать paramconverter, вам нужно будет написать собственный.

или просто использовать один вкладыш внутри вашего действия контроллера:

/** 
* @Route("/localization/{code}", name="pkt-index") 
*/ 
public function yourAction($code) 
{ 
    $localizations = $this->getDoctrine()->getRepository("YourBundle:Localization")->findBy(array("code" => $code)); 
    // ... 
Смежные вопросы