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,的主要内容,如果未能解决你的问题,请参考以下文章