@EVOSandru6

Как в Yii обновить без foreach для всех моделей, результат выборки find..()?

Добрый день,

Имею массив моделей потомков:

$category=Category::model()->findByPk(1);
$descendants=$category->descendants()->findAll();


Как можно обновить для всех $descendants поле, к примеру EXIST на значение "0" одним UpdateAll без foreach?
  • Вопрос задан
  • 2344 просмотра
Пригласить эксперта
Ответы на вопрос 2
fornit1917
@fornit1917
Вообще не пишите find тогда и не работайте с моделью Category. Работайте с той моделью, которую обновлять собираетесь.
Могу предположить, что примерно так:

Descedant::model()->updateAll(array('exist' => 0), 'category_id=1');


Если хотите именно массив выбранных AR обновлять и не хотите foreach писать ни в какую, то можно array_walk применить php.net/manual/en/function.array-walk.php
Ответ написан
Комментировать
IvanCher
@IvanCher
Мысли шире
Если я правильно понял, то попробуйте так:
$category=Category::model()->findByPk(1);
$descendants=$category->descendants()->findAll();
$ids = array_map(function($descendant) {
    return $descendant->id;
}, $descendants);

Category::model()->addInCondition('id', $ids)->updateAll(array('exist' => 0));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы