Laravel 5不存储复选框值

时间:2015-06-17 09:51:38

标签: php laravel checkbox laravel-5

我们在Laravel 5中遇到一个奇怪的问题,因为它拒绝存储复选框值。

我们正在调整与Laravel 5捆绑在一起的现有注册表单,我们正在添加一个optin复选框,但似乎模型不会将其识别为字段,即使我们将其添加为迁移文件中的字段。 / p>

对此有任何帮助将不胜感激。

Mirgration文件:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->date('dob');
        $table->boolean('optin')->nullable();
        $table->rememberToken();
        $table->timestamps();
    });
}

然后我们将它添加到register.blade.php文件:

<div class="form-group">
                        <label class="col-md-4 control-label">Optin</label>
                        <div class="col-md-6">
                            <input type="checkbox" class="form-control" name="optin">
                        </div>
                    </div>

在创建用户模型时,我们检查复选框的值并指定它。

protected function create(array $data)
{

    //this does return 1 or 0 as expected
    $optin = ($data["optin"] == "on") ? 1 : 0; 

    return User::create([
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'dob' => $data['dob'],
        'optin' => $optin
    ]);
}

但此时该字段为空。没有值输入数据库......

2 个答案:

答案 0 :(得分:2)

您是否已将字段'optin'放入模型中的$ fillable数组中?否则,您无法使用静态创建方法创建具有'optin'的用户。

//File: User.php
protected $fillable = ['optin'];

答案 1 :(得分:0)

该模型已具有static create()功能。因此,当您从控制器进行User::create($data)之类的调用时,不会调用您的函数。

我的方法是更改​​您的功能名称并将其设为static

<强>更新

您也可以覆盖创建功能:

public static function create(array $attributes)
{
    $attributes["optin"] = ($attributes["optin"] == "on") ? 1 : 0;

    return parent::create($attributes);
}