Во-первых, начальное примечание: условно ваш класс Entity, вероятно, должен быть единственным.Итак, настройка, а не настройки.Можно утверждать, что «настройки» как группа связанных настроек могут рассматриваться как одна сущность.Тем не менее, кое-что нужно иметь в виду.
В 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);
}
}
И тогда вы бы вызвали этот метод таким же образом.
Другие будут выступать за использование объекта Manager, который затем не будет привязан к Entity / ORM, но я думаю, что в этом случае это является ненужным осложнением.
Doctrine2 специально разработан, чтобы не позволять вам использовать запросы в вашем файле Entity;Entities и EntityManager на самом деле являются двумя аспектами стандартного уровня модели, разделенными для применения передовых методов.Смотрите эту статью: http://symfony2basics.jkw.co.nz/get-symfony2-working/entities/