YiiFramework сделать подзапрос с использованием суммирующей суммы

mstdmstd

Новичок
Всем привет,
Можно ли в yii 1.1.7 используя CDbCriteria и CActiveDataProvider сделать подзапрос с использованием суммирующей суммы ?

В CodeIgniter я писал вроде :

Код:
$CategoryFactory = ORM::factory('category');
$CategoryFactory->select( DB::expr(' ( select count(*) from `tour` where `tour`.`category_id` = `category`.`id` ) as related_tours_count '));...
$category_result= $CategoryFactory->find_all();
Можно ли так сделать в yii ?
 

mstdmstd

Новичок
Хочется немного другого, чтобы результирующий запрос имел вид:

Код:
 SELECT  ( select count(*) from `bp_tour` where `bp_tour`.`category_id` = `bp_category`.`id` ) as related_tours_count ,
  `bp_category`.`id` AS `id`,
  `bp_category`.`name` AS `name`,
  `bp_category`.`created_at` AS `created_at`
FROM `bp_category` AS `bp_category`
  ORDER BY `name`
Смысл этого в том, что если например в bp_category 50 строк, а для related_tours_count по таблице Tour довольно много строк(десятки и сотни),
то один запрос выше будет работать значительнее быстрее, чем 50+1 запрос, если делать запрос всех строк по bp_category а потом по каждой строке подсчитывать
related_tours_count методом
Код:
  $categoriesCount = Category::model()->count($criteria).
Писать весь запрос вручную без использования CDbCriteria - это в крайнем случае, если иначе не получится.
Для CI есть возможность написав :
Код:
  $CategoryFactory->select( DB::expr(' ( select count(*) from `tour` where `tour`.`category_id` = `category`.`id` ) as related_tours_count '));...
добавить свое поле тем sql-ем что мне нужно. В данном случае подзапрос.
Хочется аналогичной возможности в yii...
 

badmovie

Новичок
Теперь вопрос понятен. Судя по всему существуют два пути:
  1. Построитель запросов
  2. Добавление нового поля к модели и использование CDbCriteria
Построитель запросов:
PHP:
Yii::app()->db->createCommand()->select('')->from()->where()->query();
Добавление нового поля к модели и использование CDbCriteria:
PHP:
class Category extends CActiveRecord{
public $catCount;
}

$criteria = new CDbCriteria;
$criteria->select = '(select count(*) from sub_table) as catCount, name, other_fields';

$categories = Category::model()->findAll($criteria);

// Теперь поле будет доступно как свойство экземпляра

$category = array_shift($categories);
echo $category->catCount;
Ссылки http://yiiframework.ru/forum/viewtopic.php?f=4&t=2972 и http://yiiframework.ru/forum/viewtopic.php?f=3&t=3014
 
Сверху