Здравствуйте!
Необходимо получить в списке рейтинг для каждого товара, добавил на shop_item.onBeforeGetXml такой код:
$oComments = Core_Entity::factory('Comment');
$oComments
->queryBuilder()
->join('comment_shop_items', 'comments.id', '=', 'comment_shop_items.comment_id')
->join('shop_items', 'shop_items.id', '=', 'comment_shop_items.shop_item_id')
->where('shop_id', '=', 3)
->where('shop_item_id', '=', $object->id)
->where('comments.active', '=', 1);
$gradeSum=0;
$aComments = $oComments->findAll();
$gradeCount=count($aComments);
if ($gradeCount > 0) {
foreach($aComments as $oComment)
{
$gradeSum+=$oComment->grade;
}
$avgrade = round($gradeSum / $gradeCount,1);
$object->addXmlTag('avgrade', $avgrade);
}
Всё работает конечно, но выглядит не очень. Есть ли базовый функционал, который выполняет ту же задачу? Что-то типа супер метода getRatingShopItem()
?
И касаемо нагрузки, стоит ли огранить поля при выборке комментариев при помощи Core_QueryBuilder::select, ведь нужны конкретно только айдишники и grade? И есть ли возможность получить итоговый sql запрос для такой операции и возможно время её выполнения чтобы как-то смотреть на результат?