@0ct0g3n

Как сбросить Yii2 модель?

Собственно есть такой код
<?php
namespace console\controllers;

use yii\console\Controller;
use common\models\Settings;
use Yii;

class SettingsController extends Controller {
	public function actionInit() {
		$settings = Yii::$app->params['settings'];
		foreach ($settings as $key => $param) {
			if(Settings::find(['key' => $key])->one() === NULL) {
				$obj = new Settings;
				$obj->key = $key;
				$obj->type = $param[0];
				$obj->value = $param[1];
				if($obj->validate()) {
					$obj->save();
				} else {
					print 'Error on ' . $key . '\n' . $obj->errors;
				}
				unset($obj);
			}
		}
	}
}

Он заносит параметры из файла в базу данных через модель.
Сам foreach проходит по параметрам нормально, и первый параметр успешно заносится в базу, но следующие вызовы Settings::find возвращают один и тот же объект, соответственно последующие параметры в базу уже не вносятся.
Как с этим бороться?
  • Вопрос задан
  • 2603 просмотра
Решения вопроса 1
@0ct0g3n Автор вопроса
Сам решил свою проблему, используйте exists()
Settings::find()->where(['key' => $key])->exists()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Жестко вы)) В цикле запросы как правило - не самая лучшая идея (бывают конечно исключения, но это не тот случай).

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

Если в params['settings'] кто-то по ошибке задаст 'key' => 'value', ваша система будет работать не корректно.
Ответ написан
Ваш ответ на вопрос

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

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