Как правильно обновить данные в таблице из actions?

InstantCMS 2.X
#1 2 декабря 2017 в 00:25
Подскажите, как из своего экшена (в \system\controllers\content\actions\) можно обновить данные в базе?
это вообще реально на прямую из экшена ?
или по логике MVC надо обязательно в модели писать свой метод,
а уже из экшена обращаться к нему?



Пишу в экшене:
  1. $this->update($table_name, $id, $item);
но ничего не апдейтится (((


  1. $this->model->update($table_name, $id, $item);
вылетаю в 503 ошибку (
#2 2 декабря 2017 в 05:48
Если делаете запрос в бд от сюда: \system\controllers\content\actions\, то надо использовать
  1. $this->model->update($table_name, $id, $item);
Но тут есть нюанс. Чему равно $table_name и что находится в $item.
Включение режима отладки в настройках сайта, показало бы вам в чём проблема, вместо фразы "503 ....".
#3 2 декабря 2017 в 11:24
Loadырь, Спасибо!
Отладчик помог определить ошибку.

Но тут есть нюанс. Чему равно $table_name и что находится в $item.

Loadырь
Я правильно понимают что в $item должен быть ассоциативный массив,
где ключ — имя поля таблицы и значение — его новое значение?

А как быть если надо сразу обновить значения у 20-50-100 итемов?
Запихнуть все в цикл и повторять сотню запросов?
Или есть метод который это сделать в один запрос?
#4 2 декабря 2017 в 12:20

А как быть если надо сразу обновить значения у 20-50-100 итемов?
Запихнуть все в цикл и повторять сотню запросов?
Или есть метод который это сделать в один запрос?

Sonat
Можно в цикл запихнуть, можно в один запрос
  1. $where = 'user_id = 123';
  2. $this->model->db->update($table, $where, $item);
#5 2 декабря 2017 в 13:00

по логике MVC надо обязательно в модели писать свой метод

Sonat
Так было бы правильней. Если позже Вы измените структуру, тип, размер, имя каких-то данных, то если сейчас сделать без учёта MVC, потом придётся просматривать все экшены и вносить правки в них, а это увеличивает вероятность ошибок. А если при изменениях в данных впоследствии нужно будет ещё и пересчитывать какие-то другие связанные данные, то выносить работу с ними за пределы модели вообще губительно.
#6 2 декабря 2017 в 13:29

А как быть если надо сразу обновить значения у 20-50-100 итемов?

Sonat
Не совсем понятно написано.
Если у вас есть много итемов и надо обновить в таблице их все, то вам надо обновлять каждый итем в цикле отдельным запросом. А если у вас один итем и надо обновить несколько строк в таблице, тогда можно использовать предложение Ris, или правильнее (тоже самое, но по феншую)
  1. $this->model->filterEqual('user_id', 123);
  2. $this->model->updateFiltered($table, $item);
#7 2 декабря 2017 в 14:26
Всем спасибо. Разобрался.
v
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.