您好我正在尝试使用ParamConverter从数据库获取多行,但是探查器显示查询limi 1
。是否有可能像那样
/**
* @Route("/localization/{code}", name="pkt-index")
* @ParamConverter("localizations", class="PriceBundle:Localization")
*/
输入localization/0003
后我应该获得超过100行。
修改
我使用了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
id省略名称
希望这听起来很合理。
答案 0 :(得分:1)
forgettenbas的回答并不完全正确。 @ParamConverter
将首先尝试按ID ...
...然后尝试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));
// ...
答案 1 :(得分:0)
ParamConverter
目前只能从请求中提取id并从db中找到一个实体。看着
DoctrineParamConverter代码。但是你可以用一些额外的逻辑指定你的own param converter。