[英]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)->get
和User::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.