我最近开始使用Silex,Doctrine和Twig重建旧的PHP应用程序。
其中一个主要实体是“问题”(这是一个问题跟踪系统),该问题与许多其他实体有关系,如“状态”,“所有者”,“创建者”等。 我已经将所有实体创建为doctrime ORM实体并定义了所有关系。
从控制器中,我获取一个“问题”并将其发送到树枝模板,如下所示:
$issue = $app['orm.em']->getRepository('MMW\Entity\Issue')->find($issueId);
在twig模板中,我可以轻松打印出相关的实体,例如:
{{ issue.status.name }}
和
{{ issue.owner.name }}
它就像一个魅力,但当我启用日志记录以查看发送到数据库的查询时,如下所示:
$em->getConnection()
->getConfiguration()
->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
我注意到,对于每个连接,都会向数据库发送一个单独的查询。我认为性能明智,一个SQL连接查询会快得多。
我应该以不同的方式构建我的应用程序,也许使用控制器中的querybuilder来获取我需要的确切列和实体?或者有没有办法强制学说以不同的方式构建查询?
或者我应该不担心它并保持原样......?
答案 0 :(得分:0)
您应该使用Doctrine fetch join来获取整个实体,并阻止这种方式访问每个字段。我建议您阅读Doctrine文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#joins