首先,开始注意:按照惯例,您的 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 对象,然后该对象不会与实体/ORM 绑定,但我认为在这种情况下这是不必要的复杂化。
Doctrine2 专门设计为不允许您在实体文件中使用查询;Entities 和 EntityManagers 实际上是标准模型层的两个方面,分开以执行最佳实践。见这篇文章:http ://symfony2basics.jkw.co.nz/get-symfony2-working/entities/