更新布尔值失败,因为在 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-&gt;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() - 本地设置安装错误

Laravel:更新数据时在 null 上调用成员函数 getClientOriginalName()

在 [重复] 中调用布尔值上的成员函数 execute()