使用Symfony Doctrine执行具有多个表(12)的内部联接的最佳方法

时间:2016-11-08 21:48:37

标签: mysql doctrine-orm inner-join symfony

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

3 个答案:

答案 0 :(得分:1)

基本上没有问题,尽管12个表听起来有点大。或许可以考虑是否有更有效的方法对数据进行分组。

如果它是您反复发送的相同数据(例如,您通过API发送公共博客文章内容),请确保包含缓存系统以便不加入表格一遍又一遍。

答案 1 :(得分:1)

如果您的桌子不是太大,这可能没问题。如果遇到性能问题,请尝试使用纯SQL来快速获得结果。学说为每一次加入提供保湿,这样可能会减慢你的速度。

你可以改用这个:

$conn = $this->getEntityManager()->getConnection();
$stmt = $conn->prepare("[YOUR SQL]");
$stmt->bindValue(':value', $value);
$stmt->execute();
$result = $stmt->fetch();

答案 2 :(得分:1)

You can also user createQueryBuilder(). Here is small example.

Assuming you have tables such as 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');

Link的div中加载javascript可以帮助您。