Здравствуйте. Помогите, пожалуйста со следующей проблемой. (Yii2)
Имеется объект OrgModel (ActiveRecord),который привязывается к таблице организаций с 3 полями (id, name, comment). Правила валидации следующие:
public function rules()
{
return [
['name', 'required'],
[['id', 'comment'], 'safe'],
];
}
Далее строится форма и, если, передается id, из базы загружается соответствующая модель и данные вписываются в форму. id записывается как скрытое поле, чтобы потом уйти вместе с post.
Сам post обрабатывается тут:
public function actionOrgForm()
{
$model = new OrgModel;
if (Yii::$app->request->post('OrgModel'))
{
if ($model->load(Yii::$app->request->post()) && $model->validate())
{
if ($model->id != 0)
$model->update();
else
$model->insert();
return $this->runAction('org-list');
}
else
{
echo '!!!'; die();
}
}
...
}
Собственно вопросы:
-
Правильно ли делаю, что передаю id в форму и возвращаю назад, как скрытое поле? Может есть другие, общепринятые варианты? Правильно ли поступаю с правилами валидации для id?
-
Собственно сама проблема (из-за чего и прописано тут insert/update) - если форма новая, без id, то все обрабатывается нормально и новая строчка записывается в базу. Если при этом запись была (передается id) и обновляется, то insert выдает ошибку о дублировании ключей. А вот при выборе update, запись не происходит. Сам запрос формируется почему-то такой: “UPDATE
org
SETname
=‘Рога и копыта’,comment
=‘Описаниие’,id
=1 WHEREid
IS NULL”. Первичный ключ в запросе в разделе WHERE не прописывается. Подскажите, пожалуйста, в чем может быть дело? Дамп модели показывает, что свойство (ключ) id в ней есть. Тем более, что insert выдает ошибку. Свойство isNewRecord = false тоже выставлял.