我们在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
]);
}
但此时该字段为空。没有值输入数据库......
答案 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);
}