0
このプロジェクトではZend Framework 3
とDoctrine2
を使用しています。ネストされたDoctrineエンティティの掲載結果を向上させる方法
私はツリー構造のように構築された入れ子のエンティティを持っています。ステータスは、完成のために完成していないために1または2であることを例えば単純化する -
[Project] 1 - n [WorkOrders] 1 - n [WorkOrderItems]
すべてWorkOrderItem
はステータスがあります。私は今、そうのようなパーセントをすべてWorkOrderItems
を反復処理することにより、プロジェクトの進行状況を表示して計算したい:
$finishedWorkOrderItems = 0;
$totalWorkOrderItems = 0;
foreach ($this->getWorkOrders() as $workOrder) {
foreach ($workOrder->getWorkOrderItems() as $workOrderItem) {
if ($workOrderItem->getStatus() == WorkOrderItem::STATUS_FINISHED) {
$finishedWorkOrderItems++;
}
$totalWorkOrderItems++;
}
}
return 100/$totalWorkOrderItems * $finishedWorkOrderItems;
50件のプロジェクトが完全にレンダリングされたビューまでのロード時のリストを表示する非常に高い - 7の間9秒。進捗なしでリストをレンダリングすると、レンダリング時間が0.5秒から2秒の間にかなり短くなります。
私はプロジェクトのためにカスタムDQL
を使用し、そうのようなSELECT文で必要なデータを接続しようとしました:
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select(['p', 'o', 'oi'])
->from(Project::class, 'p')
->join('p.orders', 'o')
->join('o.orderItems', 'oi')
->groupBy('p');
私に測定可能なパフォーマンスの向上を与えなかったどの。
代わりに、ネストされたループのDQLから直接あなたの合計数を取得しないのはなぜ