Laravel雄辩查询不更新复选框输入

时间:2015-12-06 15:17:16

标签: php laravel laravel-5 eloquent laravel-5.1

为什么以下硬编码的雄辩查询有效:

Auth::user()->update(['text_only_email' => true ]);

但是当数据来自表单复选框输入时,即使输入为真,它也总是更新为假?

$data['text_only_email'] = $request->input('text_only_email', false);
Auth::user()->update($data);

查看die和dump的结果以证明传入的值为true:

$data['text_only_email'] = $request->input('text_only_email', false);

dd($data);

转储结果:

array:1 [▼
  "text_only_email" => "true"
]

*更新*

我已将以下mutator添加到我的User模型中以转换为布尔值,但它仍然无效。我的投射是一个布尔值正确的字符串吗?

public function setTextOnlyEmailAttribute($value)
{
    $this->attributes['text_only_email'] = (bool)($value);
}

2 个答案:

答案 0 :(得分:1)

您在请求中获得的 test_only_email 的值是字符串,而不是布尔值。首先将其转换为布尔值true / false值,然后传递给 update()

答案 1 :(得分:0)

您的mutator将始终返回true,因为“true”和“false”在转换为boolean时返回true,两者都是字符数超过零的字符串。你应该这样做:

public function setTextOnlyEmailAttribute($value)
{
    $this->attributes['text_only_email'] = $value == 'true' ? true : 
false;
}