嗨,我正在学习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);
但我总是收到回复{"状态":" 0"," msg":"失败"},记录在数据库被删除。
然后我使用dd($ res)。它在页面中显示为null。
但是从我学到的课程中它返回一个布尔值true或false。
我的代码中是否有错误?
当我从数据库中删除数据时,你能告诉我其他方法可以获得布尔结果吗?
答案 0 :(得分:38)
我认为您可以更改查询并尝试:
$res=User::where('id',$id)->delete();
答案 1 :(得分:7)
首先,
您应该知道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'
];
}
希望,你明白。
答案 2 :(得分:3)
在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);
>
答案 3 :(得分:1)
$model=User::where('id',$id)->delete();
答案 4 :(得分:0)
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'
]);
}
}
的更多信息
答案 5 :(得分:0)
删除用户前检查,否则抛出错误异常
$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
}