为什么以下硬编码的雄辩查询有效:
Auth::user()->update(['text_only_email' => true ]);
但是,当数据通过表单复选框输入时,即使输入为true,它也总是更新为false?
$data['text_only_email'] = $request->input('text_only_email', false);
Auth::user()->update($data);
查看骰子和转储的结果,以证明传入值为真:
$data['text_only_email'] = $request->input('text_only_email', false);
dd($data);
转储结果:
array:1 [▼
"text_only_email" => "true"
]
*更新*
我已经在我的用户模型中添加了以下赋值函数来强制转换为布尔值,但它仍然不起作用。将字符串转换为布尔值是否正确?
public function setTextOnlyEmailAttribute($value)
{
$this->attributes['text_only_email'] = (bool)($value);
}
您在请求中获得的test_only_email的值是字符串,而不是布尔值。首先将其转换为布尔值true/false,然后传递给update()。
您的赋值函数将始终返回true,因为"true"answers"false"在强制转换为布尔值时返回true,这两个字符串的字符数都超过零。你应该这样做:
public function setTextOnlyEmailAttribute($value)
{
$this->attributes['text_only_email'] = $value == 'true' ? true :
false;
}