首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel eloquent中保存布尔值

如何在laravel eloquent中保存布尔值
EN

Stack Overflow用户
提问于 2016-12-10 07:21:02
回答 4查看 66.3K关注 0票数 22

我在Laravel中进行了以下迁移:

代码语言:javascript
复制
<?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中的表单时运行:

代码语言:javascript
复制
public function store(CreateArticleRequest $request) {
        // $input = Request::all();
        Article::create($request->all());
        return redirect('articles');
    }

我的表单看起来像这样,所以:

代码语言:javascript
复制
{!! 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 ??

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-10 07:49:43

当复选框被勾选时,它的值就会出现在发布的数据中。当它没有被勾选时,它的值就不存在了。这意味着当您执行$request->all()时,它将只包含已勾选的复选框。因此,在您的例子中,如果您没有勾选所有3个复选框,您的$request->all()可能会生成一个空数组(假设没有其他字段被提交)。

当您运行Article::create($request->all());而没有勾选复选框时,您实际上是在向它传递一个空的数据集,这意味着您的数据库将使用您没有提供的字段的默认值进行填充。

由于您没有在迁移中提供默认值,因此MySQL将根据字段类型来猜测默认值应该是什么,在布尔值的情况下,字段类型将是0。不过,您可能会看到一些警告/错误。

有很多方法可以让它工作,以便在复选框被勾选时保存1,或者在复选框未勾选时保存0。在您的场景中,最简单的方法是将每个复选框的值设置为1,并在迁移中显式设置默认值。

迁移:

代码语言:javascript
复制
$table->boolean('favicon')->default(0);

表格:

代码语言:javascript
复制
{!! Form::checkbox('title', '1'); !!}

这样,当title复选框被选中时,您的$request->all()将返回一个包含项目'title' => '1'的数组,并将其保存在数据库中。根据您的迁移,所有未勾选的框默认为0。

但是,我更喜欢在编写处理存储的方法时更加明确。

代码语言:javascript
复制
$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();
票数 25
EN

Stack Overflow用户

发布于 2016-12-11 19:55:47

您是否记得在文章模型中的$fillable数组中传递它们?

代码语言:javascript
复制
protected $fillable = [
    'favicon',
    'title',
    'image-optimization'
];

作为复选框这件事的附注。您可以使用相同的名称进行隐藏输入,然后将其设为false。这样,如果复选框未被选中,它将为false,但如果被选中,它将返回true,因为它是最后一个值:

代码语言:javascript
复制
    <div class="input-wrpr">
        {!! Form::label('title', 'Page Title') !!}
        {!! Form::hidden('title', false); !!}
        {!! Form::checkbox('title', 'value'); !!}
    </div>
票数 13
EN

Stack Overflow用户

发布于 2021-06-11 21:13:55

使用VUE,您可以这样做:

将此行添加到您的表中

代码语言:javascript
复制
$table->boolean("image-optimization")->default(0);

将其添加到模型中,它将修改数据库中插入的值

代码语言:javascript
复制
protected $casts = ['image-optimization' => 'boolean'];

您不必使用此方法修改请求

文档:https://laravel.com/docs/8.x/eloquent-mutators

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41070382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档