无法在模型对象 Laravel 上调用 SAVE 方法

Posted

技术标签:

【中文标题】无法在模型对象 Laravel 上调用 SAVE 方法【英文标题】:Not able to call SAVE method on Model object Laravel 【发布时间】:2020-08-01 18:36:35 【问题描述】:

我正在尝试在模型 Complaints Model 的对象上调用 save 方法来更新数据库中的特定资源,但是当我在 api url 上发送 POST 请求时,它会出现此错误

BadMethodCallException:方法 Illuminate\Database\Eloquent\Collection::save 不存在。

我也尝试调用update 方法但同样的错误。

编辑代码:

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();

            $complaint->title = $request->input('Complaint_Subject');
            $complaint->description = $request->input('Complaint_Details');
            $complaint->address = $request->input('Complaint_Address');

            $complaint->update();

            return [
                'save_status' => "success"
            ];

第一行是返回响应和正确响应。

我也在尝试调用deletedestroy 方法来删​​除资源,但它也给出了同样的错误

BadMethodCallException:方法 Illuminate\Database\Eloquent\Collection::delete 不存在。

BadMethodCallException:方法 Illuminate\Database\Eloquent\Collection::destroy 不存在。

删除代码:

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();
            $complaint->destroy($request->input('id'));

            return [
                'request_status' => 'success',
                'complaint' => $complaint
            ];

这里也正确返回了响应。

请注意,complaint_id 不是表中的主键,因此我不能简单地调用 Complaint::find($request->input('id')),我必须与此 complaint_id 列值进行交叉检查才能找到资源。我从昨天开始一直在搜索,但找不到任何解决方案。我怎么解决这个问题。谢谢!!!

【问题讨论】:

"在模型的对象上" 实际上不是,错误表明这些是Eloquent\Collection,而不是模型。尝试用->first()替换->get() 试试我的答案。它会起作用的。 是的,它正在工作!!!!谢谢!!!!!!!!!!!! 【参考方案1】:

如果您的$complaint 是输出的集合。所以save 不适合这个如果你改变你的代码像$complaint = Complaint::where('complaint_id', $request->input('id'))->first(); 然后save() 将工作。

【讨论】:

【参考方案2】:

只需使用 first() 而不是 get()

Complaint::where('complaint_id', $request->id)->first()

【讨论】:

感谢您的回答!!我试过这个解决方案!它正在工作!【参考方案3】:

在您的查询中

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();

它返回Associative Arrays

但是如果你使用

$complaint = Complaint::where('complaint_id', $request->input('id'))->first();

它返回Indexed or Numeric Arrays。然后你必须使用$complaint[0]->destroy($request->input('id'));$complaint[1]->destroy($request->input('id')); 等等

【讨论】:

感谢您的回答!!我试过这个解决方案!它正在工作!

以上是关于无法在模型对象 Laravel 上调用 SAVE 方法的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 Laravel MVC 中的哪里保存模型?

Laravel/Ardent - 在 save() 上,错误:关系方法必须返回 Illuminate 类型的对象

无法使用 pre_save 信号在 django 模型中保存相关对象

Laravel 5.2 多模型 save()

如何在 laravel 5 中模拟模型上的 create 方法?

Laravel 验证更新和保存的差异