Можно ли накопить update/insert-запросы, чтобы потом разом их выполнить их через updateAll/batchInsert?

Да, в Yii есть возможность накопления update/insert-запросов для последующего выполнения через методы updateAll() и batchInsert(). Давайте рассмотрим каждый из них подробнее.

Метод updateAll() позволяет выполнить один или несколько update-запросов для указанной таблицы в базе данных. Его синтаксис выглядит следующим образом:

ModelName::updateAll($attributes, $condition, $params);

Где:
- ModelName - имя класса модели, с которой вы хотите работать;
- attributes - массив, содержащий значения полей, которые нужно обновить;
- condition - строка, содержащая условие для определения записей, которые нужно обновить;
- params - массив, содержащий значения параметров, используемых в условии.

Вы также можете передать несколько update-запросов, объединив их в одной строке через точку с запятой:

ModelName::updateAll($attributes1, $condition1, $params1);
ModelName::updateAll($attributes2, $condition2, $params2);

Теперь рассмотрим метод batchInsert(). Он позволяет выполнить несколько insert-запросов для указанной таблицы в базе данных. Синтаксис метода выглядит следующим образом:

ModelName::batchInsert($columns, $rows);

Где:
- ModelName - имя класса модели, с которой вы хотите работать;
- columns - массив, содержащий названия столбцов, в которые будут вставляться значения;
- rows - массив, содержащий значения, которые нужно вставить в таблицу.

Как и с updateAll(), вы можете передать несколько insert-запросов через точку с запятой:

ModelName::batchInsert($columns1, $rows1);
ModelName::batchInsert($columns2, $rows2);

Таким образом, если вы хотите накопить несколько update/insert-запросов, чтобы выполнить их потом разом, вы можете объединить соответствующие вызовы методов updateAll() и batchInsert() в одной строке кода:

ModelName::updateAll($attributes1, $condition1, $params1);
ModelName::updateAll($attributes2, $condition2, $params2);
ModelName::batchInsert($columns1, $rows1);
ModelName::batchInsert($columns2, $rows2);

Таким образом, вам необходимо вызвать метод updateAll() или batchInsert() столько раз, сколько запросов вы хотите накопить.

Обратите внимание, что при использовании этих методов в циклах или при обработке большого количества данных может возникнуть проблема с производительностью.