Mysql 使用Symfony原则对多个表(12)执行内部联接的最佳方法
我正在使用Symfony和Doctrine使用FosrestBundle构建一个api。我想用get创建一个资源,它将从12个以上表的“内部连接”结果中输出json数据。要执行该操作,我想在存储库中使用doctrine sql创建一个查询,然后在我的控制器中检索它。Mysql 使用Symfony原则对多个表(12)执行内部联接的最佳方法,mysql,doctrine-orm,inner-join,symfony,Mysql,Doctrine Orm,Inner Join,Symfony,我正在使用Symfony和Doctrine使用FosrestBundle构建一个api。我想用get创建一个资源,它将从12个以上表的“内部连接”结果中输出json数据。要执行该操作,我想在存储库中使用doctrine sql创建一个查询,然后在我的控制器中检索它。 这是一个好办法还是有更好的办法?基本上没有问题,尽管12张桌子听起来确实有点大。也许可以考虑是否有更有效的方法来分组数据 如果您一次又一次地发送相同的数据(例如,您正在通过API发送公共博客文章内容),请确保包含一个缓存系统,以便不
这是一个好办法还是有更好的办法?基本上没有问题,尽管12张桌子听起来确实有点大。也许可以考虑是否有更有效的方法来分组数据
如果您一次又一次地发送相同的数据(例如,您正在通过API发送公共博客文章内容),请确保包含一个缓存系统,以便不会一次又一次地加入表。如果您的表不是太大,这可能没问题。如果您遇到性能问题,请尝试使用普通SQL以获得快速的结果。教条是滋润每一个连接,这样可能会减慢你的速度 你可以用这个来代替:
$conn = $this->getEntityManager()->getConnection();
$stmt = $conn->prepare("[YOUR SQL]");
$stmt->bindValue(':value', $value);
$stmt->execute();
$result = $stmt->fetch();
您还可以使用用户
createQueryBuilder()
。这里有一个小例子
假设您有一些表,如tbl_1
,tbl_2
,tbl_3
,tbl_4
,tbl_5
$qb = $this->createQueryBuilder('tbl_1')
->select('tbl_1')
->innerJoin('tbl_1.tbl2_records', 'tbl_2')
->innerJoin('tbl_1.tbl3_records', 'tbl_3')
->innerJoin('tbl_1.tbl4_records', 'tbl_4')
->innerJoin('tbl_2.tbl5_records', 'tbl_5')
->OrderBy('tbl_1.amount', 'ASC');
可以帮助您。快速思考:创建视图/过程/。。。在SQL中并在PHP中使用它可能是一个更干净的解决方案