ActivityLogger::performedOn() 必须是 Illuminate\Database\Eloquent\Model 的实例,给定 int,
Posted
技术标签:
【中文标题】ActivityLogger::performedOn() 必须是 Illuminate\\Database\\Eloquent\\Model 的实例,给定 int,【英文标题】:ActivityLogger::performedOn() must be an instance of Illuminate\Database\Eloquent\Model, int given,ActivityLogger::performedOn() 必须是 Illuminate\Database\Eloquent\Model 的实例,给定 int, 【发布时间】:2021-10-25 06:33:12 【问题描述】:为什么update
不返回模型实例,有些可以帮助我。
控制器
public function cancel_bill_cash_store(Request $request)
$sales_cancel=Sales::where('bill_number',$request->bill_number)
->update(["cancel_bill" =>1,
"bill_status"=>$request->bill_status,
]);
if ($sales_cancel)
activity('Sales')
->performedOn($sales_cancel)
->causedBy($user)
->log('Cancelled Bill by ' . $user->name . ' with IP '.request()->ip());
toastr()->success(' Bill- '.$request->bill_number.' Imeshakuwa Cancelled Vizuri!,
Device Zimerudi Store');
return redirect()->back();
else
toastr()->error('Error: Kuna Kitu Kimekwenda Wrong !. Otherwise check Support.');
return redirect()->back();
【问题讨论】:
检索模型,修改它,然后执行->save
。这将是两个查询,但如果您既想更新模型又想检索它,则别无选择。此外,->save
可能比 update
更快,因为在某些 DBMS 中,它执行的更新限制为 1,因此数据库可能不需要扫描整个索引或表来查找所有匹配项
请您根据我的代码显示一个保存示例
【参考方案1】:
我建议采用“分而治之”的方法。将你的函数一分为二,一个只处理更新和日志,另一个处理查询:
public function cancel_bill(Sales $sales_cancel, $bill_status)
$sales_cancel->cancel_bill = 1;
$sales_cancel->bill_status = $bill_status;
$result = $sales_cancel->save();
if ($result)
activity('Sales')
->performedOn($sales_cancel)
->causedBy($user)
->log('Cancelled Bill by ' . $user->name . ' with IP '.request()->ip());
return $result;
public function cancel_bill_cash_store(Request $request)
$sales_cancel=Sales::where('bill_number',$request->bill_number)
->first();
if ($sales_cancel && $this->cancel_bill($sales_cancel, $request->bill_status))
toastr()->success(' Bill- '.$request->bill_number.' Imeshakuwa Cancelled Vizuri!,
Device Zimerudi Store');
return redirect()->back();
else
toastr()->error('Error: Kuna Kitu Kimekwenda Wrong !. Otherwise check Support.');
return redirect()->back();
这为每个功能赋予了明确的职责,一个负责更新模型,另一个负责根据结果创建响应。
编辑:如果您有很多行需要更新,您可以这样做:
function cancel_bill_cash_store(Request $request)
Sales::where('bill_number', $request->bill_number)
->get()
->each(function ($sales_cancel) use ($request)
if ($sales_cancel && $this->cancel_bill($sales_cancel, $request->bill_status))
toastr()->success(
' Bill- ' . $request->bill_number . ' Imeshakuwa Cancelled Vizuri!,
Device Zimerudi Store');
else
toastr()->error('Error: Kuna Kitu Kimekwenda Wrong !. Otherwise check Support.');
);
return redirect()->back();
这将更新每一行并记录相应的事件。
【讨论】:
正在检查.. 并得到您的反馈 我尝试了它可以工作的代码,但是`toastr()->error()` 不起作用并且它更新了一行,而一个bill_number
有很多行
它运作良好,但请注意,我无法获得成功按摩,toastr()->error()
或toastr()->success()
为什么?
如果你不介意我可以告诉你,anyDeskID 468 739 406
,那么你也会更新答案
melx6060@gmail.com以上是关于ActivityLogger::performedOn() 必须是 Illuminate\Database\Eloquent\Model 的实例,给定 int,的主要内容,如果未能解决你的问题,请参考以下文章