Sql update по кнопке в GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Gil707
Сообщения: 20
Зарегистрирован: 2017.08.01, 13:15

Sql update по кнопке в GridView

Сообщение Gil707 »

Доброго дня всем!
Недавно по воле случая начал изучать yii и столкнулся с такой проблемой с одним из виджетов - GridView:
Необходимо по нажатию на галочку напротив строки присваивать ей статус ready (поле в бд).
Есть sql команда, есть табличка, нужно поменять значение в БД по соответствующему идентификатору строки, нажимая на кнопку напротив в этой табличке. Грубо говоря чтобы 0 стал 1 (на скрине)
Изображение
В общем вопрос в том есть ли какой-то функционал встроенный для внедрения своей комманды и каким образом взять и передать параметр в эту команду. Для примера пока что есть сейчас:

Команда для изменения:

Код: Выделить всё

Yii::$app->db->createCommand('UPDATE transactions SET ready=1 WHERE id = ' .$id)->execute();
Сама вьюшка:

Код: Выделить всё

echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'value',
        ....
        'ready',
        [
            'header' => 'Подтвердить',
            'template' => '{update}',
            'buttons' => [
                'update' => function ($id???) {
                    return ???
                }
Как расположить все это дело, что в контроллер, вьюшку и модель, может в отдельную функцию запулить экшн?.. Подскажите пожалуйста.

Gil707
Сообщения: 20
Зарегистрирован: 2017.08.01, 13:15

Re: Sql update по кнопке в GridView

Сообщение Gil707 »

С передачей параметра разобрался вроде (через $model->id), остался вопрос с тем, каким образом запихать туда функцию, которая мне будет менять параметр ready в sql'e по переданному ей id...

Код: Выделить всё

'update' => function ($url, $model) {
...
                    return Html::a('<img src=./img/tick.png>', 'id='.$model->id, []);
...

lgXenos
Сообщения: 243
Зарегистрирован: 2015.11.30, 15:42

Re: Sql update по кнопке в GridView

Сообщение lgXenos »

Gil707 писал(а):
2017.08.01, 13:30

Команда для изменения:

Код: Выделить всё

Yii::$app->db->createCommand('UPDATE transactions SET ready=1 WHERE id = ' .$id)->execute();
Костыль, а не команда. Ибо есть ActiveRecords, Есть Gii генератор. Есть принципы работы с базами

Код: Выделить всё

if(Yii::$app->request->get('id')){
   $m = <модель_созданная_через_GII>::findOne(Yii::$app->request->get('id'));
   $m->ready = !$m->ready; // т.к. когда включено, вам надо выключать
   $m->save();
}
Это вложить в тот же экшен, которым генерите свою страницу
Вам надо очень много прочесть, прежде чем такое писать
Пруф:
https://github.com/yiisoft/yii2/blob/ma ... -record.md

Ответить