0

こんにちは、ParamConverter を使用して DB から複数の行を取得しようとしていますが、プロファイラーは でクエリを表示します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に変更すると渡されると思います。idarray

/**
* @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 で 1 つのエンティティを見つけようとします ...

...次に、ルート変数をdb列と照合してエンティティを見つけようとします...しかし、基本的には一度に1つのエンティティのみを変換します。

それでも 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 に答える