我刚刚阅读了官方的Symfony 3文档,并指向我需要从数据库中检索对象时,我应该使用类似的东西:
$repository = $em->getRepository('AppBundle:Product');
这里的产品只是一个没有父母的实体类,因此可以通过注释将其与之合作。但是我不确定在引号中编码模型名称是一个好主意。如果以后我得出结论以命名模型 good ,我应该搜索整个项目并以良好的方式替换产品。例如,我例如,每个模型都扩展了基本模型类,因此我可以写:Product::model()->find('nevermind')
。Symfony 3.3?
如果这是解决问题的解决方案,我不会编写:
:$repository = $em->getRepository(Product::class);
$em->getRepository('...')
返回混合的数据类型(取决于第一个参数(。即使您编写$repository = $em->getRepository(Product::class);
IDE也无法解析实际数据类型。我建议此方法(伪代码(:
/**
* Get product repo
*
* @return ProductRepository
*/
public function getProductRepository()
{
return $this->getEntityManager()->getRepository(Product::class);
}
/**
* @return DoctrineORMEntityManager
*/
public function getEntityManager(): EntityManager
{
return $this->getDoctrine()->getManager();
}
您可以将存储库声明为这样的服务:
services:
app.product_repo:
class: AppBundleEntityProductRepository
factory: ['@doctrine.orm.default_entity_manager', getRepository]
arguments:
- AppBundleEntityProduct
然后在您的控制器中:
$repository = $em->get('app.product_repo');
至少它可以与phpstorm及其Symfony插件一起使用。拥有自动完成服务确实是必须的。