kaxa3201, работу с batch update в postgres не трогал - тут смотрите сами в доку/примеры.
В целом план тот же: за каждый запрос к бд обновлять как можно больше данных (слишком большие запросы тоже не хорошо - будут тормозить). А как эти данные подготовить - зависит от реализации.
Как минимум разделить update и create в приведенном коде. Всё, что create - в batch insert. Всё, что update - в batch update.
В этом коде вы обновляете только дату - такое можно и через sql методы реализовать (там есть метод получения текущего времени).
Вы предоставили достаточно большой кусок кода, чтобы разобраться в котором нужно время и силы. Максимум, на что можно рассчитывать - что подтолкнут в нужную сторону. Но никак не будут решать за вас задачи бесплатно.
Светлана Галенко, Ну так делайте sql запрос, оттестируйте (через какой-нибудь gui для sql), чтобы возращал нужные числа, затем переделайте через Yii-шный query builder