Cheque、Efectivo、Debitoなどの他のいくつかのエンティティの親クラスであるAbonoというエンティティがあります。私のアプリケーションでは、次のようなDQLステートメントを持つリポジトリクラスを使用して、クラスAbonoのインスタンスであるすべてのオブジェクトをクエリしています(コードは実際のオブジェクトの簡略化されたバージョンです)。
$dql = "SELECT ab FROM FranquiciaBundle:Abono AS ab";
return $em->createQuery($dql)
->getResult();
私のテンプレートでは、次のような結果を示しています(ここでも簡略化されたコード):
{% for abono in abonos %}
<tr>
<td>{{ abono.id }}</td>
<td>{{ abono.tipo }}</td>
</tr>
{% endfor %}
そのテーブルに5000のレコードがあり、プロファイラーは、アプリが予想どおりに1回ではなく、5000回データベースにヒットしていると言っているので、getArrayResult()
代わりにを使用してqueリポジトリを少し変更しますgetResult()
が、問題は文{{ abono.tipo }}
がメソッドであるということですデータベースに格納されているプロパティではなく、オブジェクトの呼び出しであるため、結果の配列にハイドレイトされることはありません。
だから私の質問は、データベースに一度だけヒットするオブジェクトの配列を取得するにはどうすればよいですか?
更新:getTipo()
クラスAbonoのメソッドは、すべてのオブジェクトの遅延静的バインディングクラス名を返します。これは関連付けではありません。
public function getTipo()
{
$className = get_called_class();
$pos = strrpos($className,'\\');
return substr($className, $pos+1);
}