使用ParamConverter获取多行

时间:2013-08-06 10:38:57

标签: symfony doctrine-orm

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

希望这听起来很合理。

2 个答案:

答案 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