Evo*_*Rof 25 php laravel laravel-eloquent
嗨,我正在学习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);
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个响应{"status":"0","msg":"failed"},删除数据库中的记录.
然后我使用dd($ res).它在页面中显示为null.
但是从我学习的课程中它返回一个布尔值true或false.
我的代码中有错误吗?
你能告诉我一些其他方法,当我从数据库中删除数据时,我可以得到一个布尔结果吗?
Add*_*Ltd 54
我想你可以改变你的查询并尝试它:
$res=User::where('id',$id)->delete();
Run Code Online (Sandbox Code Playgroud)
Evo*_*Rof 14
之前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
Run Code Online (Sandbox Code Playgroud)
调用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) )
Run Code Online (Sandbox Code Playgroud)
还有其他删除方法,您可以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
Run Code Online (Sandbox Code Playgroud)
还有一件事,如果您是新手laravel,您可以使用它php artisan tinker来查看结果,这样效率更高,然后dd($result),print_r($result);
首先,
您应该知道这destroy()是通过对象或模型直接删除实体的正确方法,并且delete()只能在查询构建器中调用.
在您的情况下,您还没有检查数据库中是否存在记录.只有存在时才能删除记录.
所以,你可以这样做.
$user = User::find($id);
if($user){
$destroy = User::destroy(2);
}
Run Code Online (Sandbox Code Playgroud)
$destroy失败或成功时,该值或以上将分别为0或1.所以,您可以改变$data数组,如:
if ($destroy){
$data=[
'status'=>'1',
'msg'=>'success'
];
}else{
$data=[
'status'=>'0',
'msg'=>'fail'
];
}
Run Code Online (Sandbox Code Playgroud)
希望你能理解.