CActiveRecord последовательная выборка данных

есть сущность "запись в журнале" (Log) - у неё есть много отношений с другими сущностями, которые имеют defaultScope, именованные условия, которые берут данные из сессии и т.п. (т.е. переписать запрос руками не получится)

для вывода лога используется CGridView

для CGridView создается CactiveDataProvider, всё работает.

встала задача экспорта логов в csv формате. собственно не могу понять как делать. фетчить все записи нельзя, т.к. записей может быть ну очень много. можно ли как то получить sql с помощью которого получаются (тот, который в profile лог валится после AR запроса) данные все.

есть спецы? помогите, плиз

Если создать и настроить CDBCriteria то можно получить SQL используя его метод toArray, или испольщуя сам CDBCriteria добавить нужные LIMIT и сделать fetchAll.

В CActiveFinder есть метод buildJoinTree, который применяет все правила в дочерних объектах (те, которые описаны в with). так неужто единственный способ решить сию проблему - это расширять классы CActiveRecord и CActiveFinder ???? и что, никто с такой проблемой не сталкивался?

сделать fetchAll нельзя, т.к. в память не поместятся данные. много их, данных этих


сделать fetchAll нельзя, т.к. в память не поместятся данные. много их, данных этих

А LIMIT - вам о чем-то говорит? Или вы хотите получить SQL что бы не фетчить все данные вразу, а по одной строке?

Ну тогда просто fetch().

Или я не понимаю задачи.

не надо такого тона.

проблема в том, что для вывода в браузер данных используется AR. лог имеет много связей с другими моделями, которые в свою очередь тоже имеют связи.

в методе search модели Log создается CDbCriteria для CActiveDataProvider. так вот во внутренних моделях используется deafultScope, который создает определенные conditions для запроса на основании данных в СЕССИИ текущего пользователя. т.е. для дампа ВСЕХ записей необходимо тоже использовать AR (либо продублировать всю логику)! так вот записей получается 10 000 000 которые CActiveDataProvider методом getData вернуть не сможет.

есть конечно хак - последовательно с локом на запись доставать по 100 записей, но это хак и запросов будет много.

Charger , вот таких как ты на форумах терпеть не могу. толку от твоего гонора никакого.

Не можете терпеть, не ходите. Здесь вам никто ничего не должен.

Сразу не объяснили в чем именно проблема получения больших данных, вот я и спросил про LIMIT, как первое что пришло на ум.

После объяснения, понимаю что не сталкивался с такой проблемой, сказать мне нечего. А разбираться и вникать, так что то не хочется уже.

Разве что может быть это было не правильно привязывать модель к сессии, этому функционалу место в контроллере.

А еще не понятно, как это CGridView может отображать данные, а вы их получить и разместить в массив (или CSV) не можете.