更新布尔值失败,因为在 null 上调用成员函数 update()
Posted
技术标签:
【中文标题】更新布尔值失败,因为在 null 上调用成员函数 update()【英文标题】:Updating boolean value fails because Call to a member function update() on null 【发布时间】:2022-01-06 13:29:06 【问题描述】:当用户按下按钮时,我试图将布尔字段从 false 更改为 true,但是当我执行代码时出现此错误:
Call to a member function update() on null
这是我的迁移:
public function up()
Schema::create('posts', function (Blueprint $table)
$table->id();
$table->timestamps();
$table->string('abteilung_name')->nullable()
$table->boolean('isActive')->default(false);
);
我把它缩短了,我谈论的专栏是isActive
这是我的控制器代码:
public function activate(Post $post, Request $request)
$postID = $request->id;
$post = Post::find($postID);
$post->update(['isActive' => 1]);
return redirect()->back()->with('message', 'Anzeige veröffentlicht');
这是用户按钮的刀片代码:
<form method="post" action=" route('activate', $post->id) ">
@csrf
<button type="submit" class="text-white px-4 py-3 rounded text-base font-medium
bg-gradient-to-r from-green-400 to-blue-500 float-right shadow transition
duration-500 ease-in-out transform hover:-translate-y-1 hover:scale-100">Anzeige genehmigen
</button>
</form>
在数据库中,isActive 当前保存为“0”(零),我认为这是 laravel 的 false 方式,因为它默认为 false。我也试过这个:
$post->update(['isActive' => true]);
但它也不起作用。
【问题讨论】:
看起来您已经在使用路由模型绑定来获取帖子,即方法的Post $post
参数,您为什么要再次尝试加载它?您似乎没有提交名为 id
的输入,因此 $request->id
将是 null
。
这不是一个需要回答的问题,因为它不太可能被其他人复制。它应该被删除。
@miken32 哦该死的好吧。我应该删除它吗?我昨天无法发布答案,所以我现在尝试确定它是否有效。我当然可以删除!还是我应该删除整个帖子?
这个想法不仅是为了帮助您解决问题,也是为了帮助未来的访客。其他人一起犯同样的错误,然后找到这个答案的机会非常小。我建议删除它(当然,欢迎您对您的问题做您喜欢的事情。)
@miken32 不,你是对的。我只是认为我收到的错误消息相当具体,但由于我的目标甚至没有出现,我将删除它。非常感谢!
【参考方案1】:
错误是我已经在 Post $posts
的方法中拥有 post 模型,所以我可以简单地这样做:
$post->update(['isActive' => 1]);
这样我的代码更少,我不需要搜索具有特定ID的帖子,因为它已经通过方法中的参数识别了
【讨论】:
以上是关于更新布尔值失败,因为在 null 上调用成员函数 update()的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 致命错误:在布尔值上调用成员函数 result()
PHP:致命错误:未捕获的错误:在布尔值上调用成员函数 execute() [重复]
函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()
Codeigniter - 在布尔值上调用成员函数 result_array() - 本地设置安装错误