Laravel Eloquent 更新 Tinyint(布尔值)

4

我在更新 Eloquent 模型时遇到了一个奇怪的问题。我使用复选框(值为 1 或未定义)并在验证后使用 patch 更新所有数据。

$input = $request->all();
$service->update($input);

我试图专门勾选复选框

$input['active'] = ($request->has('active') && $input['active']) ? 1 : 0

但是这并不会影响数据库。

当我转储 Request 时,我可以看到 active: 10,但这些都不会在 update() 上更改数据库。

我进行了快速测试,并使用了:

$service->active = ($request->has('active') && $input['active']) ? 1 : 0 ;
$service->save();

执行了该任务。但为什么 update() 没有更新这个字段呢?


怎么样只是 $input['active'] = $request->has('active') ? 1 : 0 - aleksejjj
当你运行 dd($request->input('active')) 时,它会返回 true 吗? - Rwd
你尝试这个操作时是否出现错误,还是它可以正常工作但只是没有更新那个字段? - Rwd
2个回答

24

2
就这些了..我以为我都加上了。 - dev
谢谢!对我有用,但你能解释一下为什么会发生这种情况吗? - Vinay Kaithwas
2
@VinayKaithwas,如果某个列不在$fillable数组中,你就无法轻松地与它进行交互。 - Hicham O-Sfh

1
你尝试过吗:

$input = $input->except(['active']);

$input['active'] = ($request->has('active') && $input['active']) ? 1 : 0;

$service->update($input);

希望这有所帮助。

它也可以正常工作,但在处理 Laravel 中的布尔值时,最好使用 truefalse(而不是 1 和 0)。 - Hicham O-Sfh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接