无法在模型对象 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"
];
第一行是返回响应和正确响应。
与
我也在尝试调用delete
或destroy
方法来删除资源,但它也给出了同样的错误
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/Ardent - 在 save() 上,错误:关系方法必须返回 Illuminate 类型的对象
无法使用 pre_save 信号在 django 模型中保存相关对象