php forceDelete方法在laravel 5项目中未按预期工作(无法从数据库中删除模型)

2ic8powd  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(116)

我工作(编辑)在数据库中的laravel 5.8的项目基础上我有“联系人”表的主要列是:
(一个月一次,一个月一次,...,一个月二次,一个月三次,一个月四次,一个月五次...)
因此,当使用**$model-〉delete()进行软删除时,它将非常有效**
删除前(id :1name: 'name'、..、deleted_at : nulldeleted_by :nullagency_id : 1contactable_id : 1
删除后(id :1name: 'name'、...、deleted_at : (dateValue)deleted_by :1agency_id : 1contactable_id : 1

class ContactController extends Controller
{
 public function delete(Request $request)
    {

        if ($request->ajax()) {
            \Log::info($request->contact_id);
            try {
                $deleted = $this->model_instance::find($request->contact_id)->delete();
            } catch (\Exception $ex) {
                \Log::info($ex->getMessage());
            }
            if ($deleted) {
                $log_message = trans('contacts.delete_log') . '#' . $request->contact_id;
                //logActivity($log_message);
                return response()->json(['status' => 'success', 'message' => 'deleted_successfully']);
            } else {
                return response()->json(['status' => 'fail', 'message' => 'fail_while_delete']);
            }
        }

        return redirect()->route($this->index_route);
    }
}

因此,当使用**$model-〉forceDelete()for从数据库中永久删除(forceDelete)**时,不会按预期工作,但会使用用户编号填充deleted_by,并使用null值保留deleted_at
强制删除之前(id :1name: 'name',..,deleted_at : nulldeleted_by :nullagency_id : 1contactable_id : 1
强制删除后(id :1name: 'name',..,deleted_at : nulldeleted_by :1agency_id : 1contactable_id : 1

class ContactController extends Controller
{
    public function forceDelete(Request $request)
    {
        if ($request->ajax()) {
            \Log::info($request->contact_id);
            try {
                $deleted = $this->model_instance::withTrashed()->find($request->contact_id)->forceDelete();
              
            } catch (\Exception $ex) {
                \Log::info($ex->getMessage());
            }
            // if ($deleted) {
            //     $log_message = trans('contacts.delete_log') . '#' . $request->contact_id;
            //     return response()->json(['status' => 'success', 'message' => 'deleted_successfully']);
            // } else {
            //     return response()->json(['status' => 'fail', 'message' => 'fail_while_delete']);
            // }
        }
        // return redirect()->route($this->index_route);
    }
}

返回真值
所以这个方法是这样工作的,或者我的代码在某些地方有问题(我的意思是不是jsut的previos代码)?!
使用软删除在某些情况下使用delete(用于软删除),在其他情况下使用forceDelete(用于从数据库中删除)
对于软删除,它工作得很好,对于强制删除,它需要另一种情况

y4ekin9u

y4ekin9u1#

$deleted = $this->model_instance::find($request->contact_id)->forceDelete();

不会起作用。
使用where代替find

$deleted = $this->model_instance::where('id', $request->contact_id)->forceDelete();

这将非常有效。

相关问题