为什么以下硬编码的雄辩查询有效:
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);
}
答案 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;
}