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


Laravel eloquent query not updating checkbox input

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

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;
}