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

 
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Подскажите, как из своего экшена (в \system\controllers\content\actions\) можно обновить данные в базе?
это вообще реально на прямую из экшена ?
или по логике MVC надо обязательно в модели писать свой метод,
а уже из экшена обращаться к нему?


Спойлер
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
Если делаете запрос в бд от сюда: \system\controllers\content\actions\, то надо использовать
Код PHP:
  1. $this->model->update($table_name, $id, $item);
Но тут есть нюанс. Чему равно $table_name и что находится в $item.
Включение режима отладки в настройках сайта, показало бы вам в чём проблема, вместо фразы "503 ....".
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Loadырь, Спасибо!
Отладчик помог определить ошибку.

Loadырь:
Но тут есть нюанс. Чему равно $table_name и что находится в $item.
Я правильно понимают что в $item должен быть ассоциативный массив,
где ключ - имя поля таблицы и значение - его новое значение?

А как быть если надо сразу обновить значения у 20-50-100 итемов?
Запихнуть все в цикл и повторять сотню запросов?
Или есть метод который это сделать в один запрос?
Редактировалось: 1 раз (Последний: 2 декабря 2017 в 11:25)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2644
Sonat:
А как быть если надо сразу обновить значения у 20-50-100 итемов?
Запихнуть все в цикл и повторять сотню запросов?
Или есть метод который это сделать в один запрос?
Можно в цикл запихнуть, можно в один запрос
Код PHP:
  1. $where = 'user_id = 123';
  2. $this->model->db->update($table, $where, $item);
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Sonat:
по логике MVC надо обязательно в модели писать свой метод
Так было бы правильней. Если позже Вы измените структуру, тип, размер, имя каких-то данных, то если сейчас сделать без учёта MVC, потом придётся просматривать все экшены и вносить правки в них, а это увеличивает вероятность ошибок. А если при изменениях в данных впоследствии нужно будет ещё и пересчитывать какие-то другие связанные данные, то выносить работу с ними за пределы модели вообще губительно.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3545
Sonat:
А как быть если надо сразу обновить значения у 20-50-100 итемов?
Не совсем понятно написано.
Если у вас есть много итемов и надо обновить в таблице их все, то вам надо обновлять каждый итем в цикле отдельным запросом. А если у вас один итем и надо обновить несколько строк в таблице, тогда можно использовать предложение Ris, или правильнее (тоже самое, но по феншую)
Код PHP:
  1. $this->model->filterEqual('user_id', 123);
  2. $this->model->updateFiltered($table, $item);
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Всем спасибо. Разобрался.
v
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.