@DarkByte2015

Почему не срабатывает update?

У меня есть вот такой экшн

public function actionEditAuthor() {
	$author = new ArticleAuthor();
	$author->load(Yii::$app->request->post());
	$author->update();
	return $this->redirect(['article/edit-step3', 'id' => $author->article_id]);
}


Но почему-то не работает обновление (update возвращает false). Данные приходят в post запросе 100%. Дебажил.

P.S. Сейчас кто-нибудь по любому скажет что надо не делать new, а вместо этого сначала выбрать нужный объект запросом. Но я не понимаю зачем для редактирования мне лишний select запрос? Это же не экономично. Мне бы хотелось чтобы просто делался один update запрос и все. ID (PK) модели я тоже передаю с формы.
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Но я не понимаю зачем для редактирования мне лишний select запрос?

А как скрипт определит, какую запись редактировать?
Поэтому false и возвращает.
Не выдумывайте и не занимайтесь ерундой.
Получайте сначала модель, которую будете редактировать, а уж потом сохраняйте изменения.
То, что Вы сейчас делаете - для создания новой записи. Для сохранения данных используйте save(), хотя и для обновления тоже надо вызывать save().

p.s.
Вот так будет новая запись сделана в базе
public function actionAddAuthor() {
  $author = new ArticleAuthor();
  if($author->load(Yii::$app->request->post() && $author->save()){
      return $this->redirect(['article/edit-step3', 'id' => $author->article_id]);
}
}

А вот так обновление
public function actionEditAuthor($id) {
  $author = $this->findModel($id); // тут select запрос, который возвращает модель для редактирования.
  if($author->load(Yii::$app->request->post() && $author->save()){
      return $this->redirect(['article/edit-step3', 'id' => $author->article_id]);
}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы