Mysql 使用Symfony原则对多个表(12)执行内部联接的最佳方法

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发送公共博客文章内容),请确保包含一个缓存系统,以便不

我正在使用Symfony和Doctrine使用FosrestBundle构建一个api。我想用get创建一个资源,它将从12个以上表的“内部连接”结果中输出json数据。要执行该操作,我想在存储库中使用doctrine sql创建一个查询,然后在我的控制器中检索它。
这是一个好办法还是有更好的办法?

基本上没有问题,尽管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中使用它可能是一个更干净的解决方案