Имеется объект OrgModel,который пока привязывается к таблице организаций с 3 полями (id, name, comment). Правила валидации следующие:
Код: Выделить всё
public function rules()
{
return [
['name', 'required'],
[['id', 'comment'], 'safe'],
];
}
Сам 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();
}
}
1. Правильно ли делаю, что передаю id в форму и возвращаю назад, как скрытое поле? Может есть другие, общепринятые варианты?
2. Собственно сама проблема (из-за чего и прописано тут insert/update) - если форма новая, без id, то все обрабатывается нормально и новая строчка записывается в базу. Если при этом запись была и обновляется, insert выдает ошибку о дублировании ключей. А вот при выборе update, запись не происходит. Сам запрос формируется почему-то такой: "UPDATE `org` SET `name`='Рога и копыта', `comment`='Описаниие', `id`=1 WHERE `id` IS NULL". Первичный ключ в запросе не прописывается. Подскажите, пожалуйста, в чем может быть дело? Дамп модели показывает, что свойство (ключ) id в ней есть. Тем более, что insert выдает ошибку. Свойство isNewRecord = false тоже выставлял.