最初に、最初のメモ: 慣例により、Entity クラスはおそらく単数形である必要があります。つまり、設定ではなく、設定です。関連する設定のグループとしての「設定」は、1 つのエンティティと見なすことができると主張できます。それでも、心に留めておくべきことがあります。
Doctrine2 では、リポジトリを使用してこのタイプのクエリを作成します。を呼び出すコードではSettings::getParam
、代わりにリポジトリを取得してクエリを実行します。symfony2 で、次のように言います。
// $em is your entitymanager, as you were going to pass to your method above
// $key is the key you were going to pass to your method above
$repository = $em->getRepository('\FrontendBundle\Settings');
$setting = $repository->getByParam($key);
デフォルトでは、コードを記述しなくても、リポジトリはエンティティの各フィールドに対して getByXXXX を定義します。
より複雑なクエリを作成する必要がある場合は、リポジトリを拡張できます。
use Doctrine\ORM\EntityRepository;
class SettingsRepository extends EntityRepository
{
public function getBySomeComplicatedQuery() {
$sort_order = $this->getEntityManager()
->createQuery('SELECT count(s) FROM FrontendBundle\Settings s WHERE s.value > 32')
->getResult(Query::HYDRATE_SINGLE_SCALAR);
}
}
そして、同じ方法でそのメソッドを呼び出します。
他の人は、Entity/ORM に結び付けられない Manager オブジェクトの使用を提唱しますが、この場合、それは不必要な複雑さだと思います。
Doctrine2 は、Entity ファイルでクエリを使用できないように特別に設計されています。Entity と EntityManagers は、実際には標準モデル レイヤーの 2 つの側面であり、ベスト プラクティスを適用するために分割されています。この記事を参照してください: http://symfony2basics.jkw.co.nz/get-symfony2-working/entities/