首页 > 解决方案 > 将日期传输到数据库

问题描述

Yii 中的初学者,在 GridView 中连接了 DatePicker,但是当我设置日期时,在数据库中没有任何变化,有旧值。我不明白如何使数据进入数据库。

看法:

    <?= GridView::widget([

            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
                'avito_login',
                'avito_password',
                'Region',
                "City",
                "legal_entity",
                "manager_contact_phone",
                "avito_user_id",
                "teg",

        [
            'label' => 'Date begin subscription',
            'value' => function ($model, $key, $value) {
                return \kartik\date\DatePicker::widget([
                    'name' => 'date_subscription',
                    'model' => $model,
                    'value' => $model->date_subscription,
                    'type' => DatePicker::TYPE_INPUT,
                    'pluginOptions' => [
                        'format' => 'yyyy-mm-dd',
                        'autoclose' => true,
                    ],
'pluginEvents'=>[
                'changeDate'=>"function(e) {[jQuery.ajax({ url: '/admin/clients/date-subscription', type: 'post', contentType: 'application/x-www-form-urlencoded', dataType: 'html', data: { data: this.value }, success: function (data) { alert(data) });
                                 }",
                           ],
                   ]);
                         },
            'format' => 'raw',
        ],

    ?>

控制器

public function actionDateSubscription()
{

    $datesubscription = Yii::$app->request->post('date_subscription');
}

什么都没有发生,日期停止活动的字段

标签: mysqlyii2

解决方案


您基本上需要将 ajax 调用绑定到datepicker发送date到服务器的服务器controller/action,服务器将新日期更新到数据库中并将响应发送回前端,如果一切正常,它会刷新 gridview 以反映新日期。

是一个类似的答案,它使用切换开关来更新数据库status列,您可以大致了解该过程。

在您的情况下,唯一不同的是您必须使用pluginEvents选项来指定changeDate事件并将 ajax 调用绑定到该事件,如下所示

[
    'label' => 'Date begin subscription',
    'value' => function ($model, $key, $value) {
        return \kartik\date\DatePicker::widget([
            'name' => 'date_subscription',
            'model' => $model,
            'value' => $model->date_subscription,
            'type' => DatePicker::TYPE_INPUT,
            'pluginOptions' => [
                'format' => 'yyyy-mm-dd',
                'autoclose' => true,
            ],
            'pluginEvents'=>[
                'changeDate'=>"function(e) { //call your ajax fuction here }",
            ]
        ]);
    },
    'format' => 'raw',
],

注意:如果您允许date_subscription为空/null,请确保您在clearDate事件中也调用 ajax 以及changeDate.

有关事件的完整列表,请参阅DOCS


推荐阅读