我在 Laravel 中进行了以下迁移:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class QualityCheckTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('quality_check', function (Blueprint $table) {
$table->increments('id');
$table->boolean('favicon');
$table->boolean('title');
$table->boolean('image-optimization');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('quality_check');
}
}
我有以下在前端提交表单时运行的控制器方法:
public function store(CreateArticleRequest $request) {
// $input = Request::all();
Article::create($request->all());
return redirect('articles');
}
我的表格看起来像,所以:
{!! Form::open([ 'action' => 'QualityCheckController@validateSave' , 'class'=>'quality-check-form' , 'method' => 'POST' ]) !!}
<div class="input-wrpr">
{!! Form::label('favicon', 'Favicon') !!}
{!! Form::checkbox('favicon', 'value' ); !!}
</div>
<div class="input-wrpr">
{!! Form::label('title', 'Page Title') !!}
{!! Form::checkbox('title', 'value'); !!}
</div>
<div class="input-wrpr">
{!! Form::label('image-optimization', 'Image Optimization') !!}
{!! Form::checkbox('image-optimization', 'value'); !!}
</div>
{!! Form::submit('Click Me!') !!}
{!! Form::close() !!}
因此,当方法运行时,复选框的值将保存到数据库中。
截至目前,所有条目都显示为 0
,如下所示:
现在如何做到这一点,当复选框被选中时, 1
被保存,当复选框未被选中时,值留在 0
?
原文由 Alexander Solonik 发布,翻译遵循 CC BY-SA 4.0 许可协议
当一个复选框被勾选时,它的值出现在发布的数据中。取消勾选时,它的价值不存在。这意味着当您执行
$request->all()
时,它将仅包含已勾选的复选框。因此,在您的情况下,如果您未选中所有 3 个复选框,您的$request->all()
可能会产生一个空数组(假设没有发布其他字段)。当您运行
Article::create($request->all());
没有勾选复选框时,您实际上将传递一组空数据,这意味着您的数据库将填充您未提供的字段的默认值。由于您没有在迁移中提供默认值,MySQL 将根据字段类型猜测默认值应该是什么,如果是布尔值,它将是
0
。不过,您可能会看到一些警告/错误。有很多方法可以
1
工作,以便在勾选复选框时保存0
。在您的场景中,最简单的方法是将每个复选框的值设置为1
并在迁移中明确设置默认值,即移民:
形式:
这样,当标题复选框被打勾时,您的
$request->all()
返回一个包含项目的阵列'title' => '1'
和此dateBase in your database均节省。根据您的迁移,所有未选中的框都默认为 0。然而,当我编写处理商店的方法时,我更喜欢更明确。