请求中的Laravel未获取参数不能为空

时间:2018-01-25 22:56:23

标签: forms laravel null request required

你好我的问题是,当我将数据从表单发布到我的控制器时,它会发出一个错误,说我的列不能为空。

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'date' cannot be null (SQL: insert into `tasks` (`body`, `importance`, `date`, `updated_at`, `created_at`) values (qqqqqq, i_u, , 2018-01-25 22:29:16, 2018-01-25 22:29:16))

似乎必须填写此列,但我希望它是可选的。 我试图将其作为默认值为null但它不起作用。 实际上,当填充列时一切正常。 问题是我希望可以选择填充此输入。

这是源plz的帮助。(我猜这都是关于日期的)

我的表格

 <form class="form-inline" method="post" action="/planer/public/">
            {{ csrf_field() }}

            {{--Describtion of a taks--}}
            <div class="form-group mb-2">

                

            {{--Importance--}}
            <div class="form-group  mx-sm-3 mb-2">
                <select class="form-control" name="importance">
                    <option value="i_u">Ważne pilne</option>
                    <option value="i_nu">Ważne mniej pilne</option>
                    <option value="ni_u">Mniej ważne pilne</option>
                    <option value="ni_nu">Mniej ważne mniej pilne</option>



                </select>
            </div>

            {{--Date--}}
            <div class="form-group mb-2"> <!-- Date input -->
                <input class="form-control" id="date" name="date" placeholder="Day/Month/Hour" type="text" value=""/>
            </div>

        <button type="submit" class="btn btn-primary mb-2">Dodaj</button>

        </form>

来自web.php的路线

Route::get('/','TasksController@index');

路线::交(&#39; /&#39;,&#39; TasksController @商店&#39);

路线::删除(&#39; / {任务}&#39;,&#39; TasksController @破坏&#39);

我的表

public function up()
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->increments('id');
        $table->string('body');
        $table->string('importance');
        $table->string('date');
        $table->timestamps();
    });
}

我的控制器

 public function store(){
    $this->validate(request(),[
        'body'=>'required',
        'importance'=>'required'
    ]);

    Task::create([
        'body'=>request('body'),
        'importance'=>request('importance'),
        'date'=>request('date')
    ]);
    return redirect('/');
}

1 个答案:

答案 0 :(得分:1)

如果您希望在迁移时将列标记为statnet,则必须将其标记为nullable

public function up()
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->increments('id');
        $table->string('body');
        $table->string('importance');
        $table->string('date')->nullable();
        $table->timestamps();
    });
}

此处的文档位于:https://laravel.com/docs/5.5/migrations#column-modifiers

您可以在迁移中使用changes()方法修改已创建的列,例如:

  1. php artisan make:migration set_date_nullable --table=tasks

  2. 撰写您的迁移:

    Schema::table('tasks', function (Blueprint $table) {
        $table->string('date')->nullable()->change();
    });
    
  3. 运行php artisan migrate

  4. 此处的文档位于:https://laravel.com/docs/5.5/migrations#modifying-columns

    P.s:查看date列类型,而不是string