【发布时间】:2014-10-29 08:35:18
【问题描述】:
我做了一些研究来回答它,但我没有找到。
我想知道在以下之间选择(加入)的最佳做法是什么:
使用查询生成器?
$this->getEntityManager()->createQueryBuilder()
->select('e')
->from('Module\Entity\MyEntity 'e')
->innerJoin('Module\Entity\MyEntity2', 'e2', 'WITH', 'e.e2_id = e2.id')...
->where("...")
或
使用 SQL 语句?
$db = $this->getEntityManager()->getConnection();
$sql = "SELECT * FROM myEntity e
INNER JOIN myEntity2 AS e2 ON e2.id = e.e2_id....
WHERE ....;"
它更安全,更快,...?
【问题讨论】:
-
@SBH 说 DQL 应该是您的默认选择是正确的。您的 innerJoin 示例过于复杂。 D2 已经知道实体之间的关系。一个简单的 innerJoin('e1.e2','e2') 就是你所需要的,尽管大多数时候你可能想要使用左连接。而且(在 D2 中)你永远不会有一个名为 e2_id 的属性。只是e2。考虑对象,而不是 id。
标签: php mysql performance doctrine-orm query-builder