【问题标题】:Laravel 5 not storing checkbox valueLaravel 5不存储复选框值
【发布时间】:2015-09-02 11:35:13
【问题描述】:

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

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

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

迁移文件:

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
    ]);
}

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

【问题讨论】:

  • 所以$optin 甚至没有保存为 0?
  • 否,该字段为空。即使在 PHP tinker 中尝试过,它仍然拒绝将 $user->optin = 1 添加到用户对象,但会让我分配其他名称!但是尝试更改名称,但实际上仍然没有将值添加到数据库中!

标签: php laravel checkbox laravel-5


【解决方案1】:

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

//File: User.php
protected $fillable = ['optin'];
【解决方案2】:

模型已经有一个static create() 函数。因此,当您从控制器拨打 User::create($data) 之类的电话时,您的函数不会被调用。

我的做法是把你的函数名改成static

更新

你也可以重写创建函数:

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

    return parent::create($attributes);
}

【讨论】:

  • 但这是与 Laravel 5 捆绑在一起的 AuthController.php...?
  • 调用上述函数的意义何在?我想这个函数是由像User::create($data)这样的控制器调用的。
  • 它贯穿 laravel 供应商目录中存在的 Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers 特征,因此它通过那里被调用...
  • 哦,现在我明白你想要什么了。我会更新我的答案。
  • 感谢您的建议,但是现在这给了我一个错误。在第 67 行调用 /Users/substance/Sites/big-bang-theory-fans-giving/app/Http/Controllers/Auth/AuthController.php 中未定义的方法 App\Http\Controllers\Controller::create() 跨度>
猜你喜欢
  • 2018-09-03
  • 2021-08-23
  • 1970-01-01
  • 2017-01-08
  • 2017-05-13
  • 2015-06-30
  • 2023-04-03
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多