我在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');
}
}
我提交了以下控制器方法,该方法在提交frontEnd中的表单时运行:
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
??
答案 0 :(得分:10)
勾选复选框后,其值将显示在已过帐的数据中。当它未被攻击时,它的值不存在。这意味着当您执行$request->all()
时,它将仅包含已勾选的复选框。因此,在您的情况下,如果您取消选中所有3个复选框,则$request->all()
可能会产生一个空数组(假设没有其他字段被发布)。
当您运行Article::create($request->all());
但未选中任何复选框时,您实际上将向其传递一组空数据,这意味着您的数据库将使用您未执行的字段的默认值填充。提供。
由于您没有在迁移中提供默认值,因此MySQL将根据字段类型猜测默认值,在布尔值的情况下,该字段类型为0
。您可能会看到一些警告/错误。
您可以通过多种方式将其设置为有效,以便勾选复选框时保存1
,或者勾选复选框时保存0
。您方案中最简单的方法是将每个复选框的值设置为1
,并在迁移中明确设置默认值,即
迁移:
$table->boolean('favicon')->default(0);
形式:
{!! Form::checkbox('title', '1'); !!}
这样,当勾选标题复选框时,$request->all()
将返回包含项'title' => '1'
的数组,并将其保存在数据库中。根据您的迁移,所有未打开的框默认为0。
但是,当我编写处理商店的方法时,我更倾向于更明确。
$article = new Article();
$article->title = $request->has('title'); // Will set $article->title to true/false based on whether title exists in your input
// ...
$article->save();
答案 1 :(得分:6)
您是否记得在文章模型的$fillable
数组中传递它们?
protected $fillable = [
'favicon',
'title',
'image-optimization'
];
并作为复选框的旁注。您可以使用相同的名称创建隐藏的输入,并将其设置为false。这样,如果取消选中该复选框,它将为false,但如果选中它,它将返回true,因为它是最后一个值:
<div class="input-wrpr">
{!! Form::label('title', 'Page Title') !!}
{!! Form::hidden('title', false); !!}
{!! Form::checkbox('title', 'value'); !!}
</div>
答案 2 :(得分:2)
您可以检查复选框是否设置为@foreach ($domain->emails as $email)
或isset($request->favicon)
或empty($request->favicon)
:
->has('favicon')
答案 3 :(得分:1)
你可以在Laravel中使用mutators。使用此链接,您就会明白: -
答案 4 :(得分:0)
使用 VUE,您可以这样做:
将此行添加到您的表格中
$table->boolean("image-optimization")->default(0);
将此添加到您的模型中,它将修改插入到数据库中的值
protected $casts = ['image-optimization' => 'boolean'];
您不必使用此方法修改请求