Eloquent布尔属性有时会更新,有时则不会

时间:2016-06-18 21:05:59

标签: laravel laravel-5 eloquent

我的模型上有以下mutator:

/**
 * @param $value
 */
public function setBreadcrumbAttribute($value)
{
    $fix = is_null($value) ? 0 : (integer) $value;
    $this->attributes['breadcrumb'] = $fix;
}

以下是我的html:

{!! Form::checkbox('breadcrumb', 1, null, [
    'id' => 'breadcrumb'
]) !!}

这是在我的控制器中:

$page->update($request->only('title', 'body', 'breadcrumb'));

breadcrumb属性更新大约是保存表单的6/10次。其余的,它似乎是设置正确的属性$this->attributes['breadcrumb']但由于某种原因没有保存到数据库。

这让我发疯了。

P.S。我is_null检查的原因是,如果我取消选中该复选框,则会向请求返回null

P.P.S。 breadcrumb属性在数据库中保存为boolean (tinyint)

1 个答案:

答案 0 :(得分:0)

如果未选中复选框,则根本不会通过复选框。因此,当未选中时它不在输入中。您应该在填写模型之前检查这一点,或者在表单中添加默认值。

您可以添加隐藏字段,其值为0,并且与html中的复选框前面的复选框名称相同。输入按顺序传递,因此在检查时它将覆盖隐藏的输入。如果未选中,隐藏的那个将是您最终使用的那个。因此,无论哪种方式,您都会在请求输入中得到一个值。