cgridview template, getData()

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
vNx
Сообщения: 5
Зарегистрирован: 2011.08.22, 17:41

cgridview template, getData()

Сообщение vNx »

Здравствуйте, у меня 2 вопроса.

1) Как отключить в cgridview выполнение запроса count(*) для отображения количества записей? Когда четко указываю:

Код: Выделить всё

'template' => '{pager} {items} {pager}' 
то все равно выполняется запрос count(*) хотя он мне не нужен, так как не отображается информация о кол-ве записей.

2) У меня есть таблица записей в которой есть поле status. Я хочу выводить в отдельных закладках CJuiTabs отдельные таблицы cgridview для каждого статуса. Вопрос такой - можно ли сделать 1 запрос на получение всех записей, а уже самому cgridview указать на условие, с которым выбирать из результата, что-то на подобии:

Код: Выделить всё

'dataProvider' => $dataProvider->getData()->condition('status = 1') 
Это вопрос оптимизации, не хотелось бы для каждого из 5 статусов делать по запросу.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: cgridview template, getData()

Сообщение rak »

1. запрос с count нужен для постраничной навигации
2. можно выбирать все записи и использовать их в carraydataprovider, но если записей будет много, то это съест очень много памяти
vNx
Сообщения: 5
Зарегистрирован: 2011.08.22, 17:41

Re: cgridview template, getData()

Сообщение vNx »

Спасибо за ответ. Можно пример по 2 пункту?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: cgridview template, getData()

Сообщение rak »

что-то в этом духе

Код: Выделить всё

$allData = TestModel::model()->findAll();
$data1 = array();
$data2 = array();
foreach($allData as $model) {
    if($model->field == 1) {
        $data1[] = $model;
    } else {
        $data2[] = $model;
    }
}
$provider1 = new CArrayDataProvider($data1);
$provider2 = new CArrayDataProvider($data2);
 
vNx
Сообщения: 5
Зарегистрирован: 2011.08.22, 17:41

Re: cgridview template, getData()

Сообщение vNx »

Спасибо за пример, разобрался ;)
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: cgridview template, getData()

Сообщение Johnatan »

Я, возможно, буду неправ, но хотелось бы сказать, что в плане производительности вариант с двумя запросами предпочтительней, чем вариант с обходом по циклу всех данных.
Конференция: yii@conference.jabber.ru
Аватара пользователя
DeusModus
Сообщения: 95
Зарегистрирован: 2011.01.05, 23:07
Откуда: спб

Re: cgridview template, getData()

Сообщение DeusModus »

Johnatan писал(а):Я, возможно, буду неправ, но хотелось бы сказать, что в плане производительности вариант с двумя запросами предпочтительней, чем вариант с обходом по циклу всех данных.
Почему вы так считаете? Все зависит от количества данных.
Все чаще, когда люди говорят о производительности, хочется видеть тесты.
Правильное действие,в основе своей простоты.Если жизнь кажется сложной,вы что-то делаете не так.
vNx
Сообщения: 5
Зарегистрирован: 2011.08.22, 17:41

Re: cgridview template, getData()

Сообщение vNx »

Запросов будет больше. Если посчитать, то у меня есть 4 типа статусов. Если делать для каждого по запросу, то получится 8 запросов (4 на выборку данных и 4 на подсчет количества данных (тот самый count(*) ) против 1 запроса и обхода по циклу.
Ответить