Если вы используете findAll
, тогда все записи будут возвращены без каких-либо ограничений. Однако CActiveDataProvider
автоматически выводит на экран результаты, если вы не говорите об этом иначе. Как упоминалось в комментариях, вы, вероятно, исчерпаете память при использовании findAll
. Использование лимита или разбиения на страницы (которое автоматически применяет предел) снижает количество возвращаемых строк до того, что может обрабатывать ваше приложение.
Я рекомендую использовать CDataProviderIterator для получения большого количества активных записей. Попробуйте следующий пример кода.
$criteria = new CDbCriteria;
$criteria->compare('country','US');
$Profiles = CDataProviderIterator(
new CActiveDataProvider(
'Profile',
array('criteria'=>$criteria)
),
10000
);
foreach ($Profiles as $Profile) {
//do whatever
}
Используя итератор, Yii будет автоматически получать только 10000 записей (число вы говорите, работали без запуска из памяти) в то время, а затем удалить их из памяти прежде, чем захватить следующую страницу. Удобно, что все записи можно получить с помощью цикла foreach
без дополнительной работы.
Измените значение 10000 по мере необходимости для достижения желаемых результатов. Кроме того, убедитесь, что вы отслеживаете журналы ошибок, чтобы идентифицировать нехватку памяти и другие ошибки.
Потому что было так много записей, что у вас закончилась память? В любом случае этот вопрос бессмыслен без дополнительной информации, поскольку мы просто будем гадать. Поместите приложение в режим отладки и получите его. – Jon
нужна дополнительная информация? '$ criteria = новый CDbCriteria(); $ criteria-> addCondition ('t.country =: country'); $ criteria-> params [': country'] = 'US'; $ dataProvider = новый CActiveDataProvider ('Профиль', массив ('критерии' => $ критерии)); использовал это .. тогда он работает – Akhil5
Сообщения об ошибках из журналов сервера будут хорошим началом. Вы положили приложение в режим отладки? – Jon