@DangerPro
Новичок в web-программировании

Обновление данных в БД?

Вся суть этой истории такова: Через GridView вывожу данные из базы. В колонке вывожу чекбоксы(CheckboxColumn). И через dropDownList вывожу список категорий.
Html::dropDownList('records','id',
            ArrayHelper::map($listData,'id', 'name'),
            ['prompt' => '-- Выбрать категорию --']);

У выбранных через checkbox книг, нужно изменить категорию.
Блин я что-то туплю)) Нужно еще передать id самой книги у которой будет изменяться category_id.
В $records получается:
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)

А в $selection попадает значение категории которое нужно изменить. Там оказался просто (int), а не массив. Извиняюсь за форс-мажор

А в обработчике делаю такое:
Есть такой код. В $records попадают id категории которые нужно изменить (их от 1 до N т.е. это массив) на $selection в которую попадает id той же таблицы (здесь одно значение). Вроде все просто. Почитал документацию, посмотрел примеры, но догнать так и не могу.
if ($records = Yii::$app->getRequest()->post('records')
                && $selection = Yii::$app->request->post('selection')) {
                foreach($selection as $id){
                    $e = Book::findOne((int)$id);
                    $e->save();
                }
            }

В обе переменные данные приходят, а вот дальше никак не обновляется
hkar.ru/Mi7k
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
$records = Yii::$app->getRequest()->post('records');
$selection = Yii::$app->request->post('selection');
if (!is_null($records) && !is_null($selection)) {
    Book::updateAll(['category_id' => $selection], ['id' => $records]);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
если
на $selection в которую попадает id той же таблицы (здесь одно значение)

то почему Вы перебираете? Если это строка

Если я правильно понял, то должно быть:
$id = $records[$selection];
if($e = Book::findOne($id)){
$e->save();
}

приведите пример $_POST
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы