есть сущность "запись в журнале" (Log) - у неё есть много отношений с другими сущностями, которые имеют defaultScope, именованные условия, которые берут данные из сессии и т.п. (т.е. переписать запрос руками не получится)
для вывода лога используется CGridView
для CGridView создается CactiveDataProvider, всё работает.
встала задача экспорта логов в csv формате. собственно не могу понять как делать. фетчить все записи нельзя, т.к. записей может быть ну очень много. можно ли как то получить sql с помощью которого получаются (тот, который в profile лог валится после AR запроса) данные все.
Если создать и настроить CDBCriteria то можно получить SQL используя его метод toArray, или испольщуя сам CDBCriteria добавить нужные LIMIT и сделать fetchAll.
В CActiveFinder есть метод buildJoinTree, который применяет все правила в дочерних объектах (те, которые описаны в with). так неужто единственный способ решить сию проблему - это расширять классы CActiveRecord и CActiveFinder ? и что, никто с такой проблемой не сталкивался?
проблема в том, что для вывода в браузер данных используется AR. лог имеет много связей с другими моделями, которые в свою очередь тоже имеют связи.
в методе search модели Log создается CDbCriteria для CActiveDataProvider. так вот во внутренних моделях используется deafultScope, который создает определенные conditions для запроса на основании данных в СЕССИИ текущего пользователя. т.е. для дампа ВСЕХ записей необходимо тоже использовать AR (либо продублировать всю логику)! так вот записей получается 10 000 000 которые CActiveDataProvider методом getData вернуть не сможет.
есть конечно хак - последовательно с локом на запись доставать по 100 записей, но это хак и запросов будет много.