0

您好我正在尝试使用 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

在这里,我认为 symfonyid像主键一样,并且作为存储库方法的参数,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")
*/

将通过stringid 省略名称

希望这听起来合理。

4

2 回答 2

1

遗忘的答案并不完全正确。@ParamConverter将首先尝试通过 id 找到一个实体...

...然后尝试将路由变量与 db 列匹配以找到一个实体...但本质上它一次只会转换一个实体。

如果您仍想使用 paramconverter,则需要编写一个自定义的。

或者只是在控制器操作中使用单线:

/**
 * @Route("/localization/{code}", name="pkt-index")
 */
public function yourAction($code)
{
     $localizations = $this->getDoctrine()->getRepository("YourBundle:Localization")->findBy(array("code" => $code));
     // ...
于 2013-08-06T11:05:27.897 回答
0

ParamConverter目前只能从请求中提取 id 并从 db 中找到一个实体。查看 DoctrineParamConverter代码。但是您可以使用一些额外的逻辑指定您自己的参数转换器。

于 2013-08-06T10:58:01.277 回答