簡體   English   中英

laravel Eloquent ORM delete() 方法

[英]laravel Eloquent ORM delete() method

嗨,我正在研究 laravel。我使用 Eloquent ORM 刪除方法,但我得到了不同的結果。不是 true 或 false,而是 null。我設置了資源路由,UsersController 中有一個 destroy 方法。

public function destroy($id){

  $res=User::find($id)->delete();
  if ($res){
    $data=[
    'status'=>'1',
    'msg'=>'success'
  ];
  }else{
    $data=[
    'status'=>'0',
    'msg'=>'fail'
  ];
  return response()->json($data);

但我總是得到響應 {"status":"0","msg":"failed"},數據庫中的記錄被刪除。

然后我使用 dd($res)。它在頁面中顯示 null。

但是從我學到的課程中,它返回 boolean 值 true 或 false。

我的代碼有什么錯誤嗎?

你能告訴我一些其他方法,當我從數據庫中刪除數據時,我可以獲得 boolean 結果嗎?

我認為您可以更改您的查詢並嘗試如下:

$res=User::where('id',$id)->delete();

起初,

您應該知道destroy()是通過對象或模型直接刪除實體的正確方法,並且delete()只能在查詢構建器中調用。

在您的情況下,您尚未檢查數據庫中是否存在記錄。 記錄只有在存在時才能刪除。

所以,你可以像下面這樣做。

$user = User::find($id);
    if($user){
        $destroy = User::destroy(2);
    }

上面的值或$destroy在失敗或成功時分別為 0 或 1。 因此,您可以更改$data數組,例如:

if ($destroy){

    $data=[
        'status'=>'1',
        'msg'=>'success'
    ];

}else{

    $data=[
        'status'=>'0',
        'msg'=>'fail'
    ];

}

希望,你懂的。

delete之前,laravel 中有幾個方法。

User::find(1)User::first()返回一個實例。

User::where('id',1)->getUser::all()返回一個實例集合。

在模型實例上調用delete將返回true/false

$user=User::find(1);
$user->delete(); //returns true/false

在實例集合上調用delete將返回一個數字,該數字表示已刪除的記錄數

//assume you have 10 users, id from 1 to 10;
$result=User::where('id','<',11)->delete(); //returns 11 (the number of the records had been deleted)

//lets call delete again
$result2=User::where('id','<',11)->delete(); //returns 0 (we have already delete the id<11 users, so this time we delete nothing, the result should be the number of the records had been deleted(0)  ) 

還有其他刪除方法,您可以調用destroy作為模型靜態方法,如下所示

$result=User::destroy(1,2,3);
$result=User::destroy([1,2,3]);
$result=User::destroy(collect([1, 2, 3]));
//these 3 statement do the same thing, delete id =1,2,3 users, returns the number of the records had been deleted

還有一件事,如果你是laravel ,你可以使用php artisan tinker來查看結果,這樣效率更高,然后dd($result) , print_r($result);

Laravel Eloquent提供了destroy()函數,其中返回boolean值。 因此,如果數據庫中存在記錄並被刪除,您將得到true否則為false

這是一個使用Laravel Tinker shell的例子。

刪除操作結果

在這種情況下,您的代碼應如下所示:

public function destroy($id)
    {
        $res = User::destroy($id);
        if ($res) {
            return response()->json([
                'status' => 1,
                'msg' => 'success'
            ]);
        } else {
            return response()->json([
                'status' => 0,
                'msg' => 'fail'
            ]);
        }
    }

有關Laravel Eloquent 刪除模型的更多信息

$model=User::where('id',$id)->delete();

您可以使用兩種方式刪除數據。 首先,使用find其次,將where與 model 一起使用 您可以嘗試這樣的操作。 第一的:

User::find($id)->destroy();

或第二種方式

User::where('id', $id)->delete();

現在請嘗試它會返回真/假結果。

在刪除用戶之前檢查否則拋出錯誤異常

$user=User::find($request->id);
  
   if($user)
   {
   // return $user;           <------------------------user exist
       if($user->delete()){
         return 'user deleted';
         }
    else{
       return "something wrong";
        }   

   }
  else{
     return "user not exist";// <--------------------user not exist
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM