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