Php laravel雄辩的ORM delete()方法

Php laravel雄辩的ORM delete()方法,php,laravel,laravel-eloquent,Php,Laravel,Laravel Eloquent,嗨,我在学习拉威尔。 我使用了雄辩的ORM delete方法,但得到了不同的结果。不是true或false,而是null。 我设置了一个资源路由,UsersController中有一个destroy方法 public function destroy($id){ $res=User::find($id)->delete(); if ($res){ $data=[ 'status'=>'1', 'msg'=>'success' ]; }e

嗨,我在学习拉威尔。 我使用了雄辩的ORM delete方法,但得到了不同的结果。不是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

但从课程中我了解到,它返回一个布尔值true或false

我的代码有错误吗


您能告诉我从数据库中删除数据时可以得到布尔结果的其他方法吗?

我想您可以更改查询并尝试如下操作:

$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'
    ];

}

希望您能理解。

LaravelEloquent提供了
destroy()
函数,其中返回
布尔值。因此,如果数据库中存在一条记录,并且已删除,您将得到
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中有几种方法

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)  ) 

还有一件事,如果您是
laravel
新手,您可以使用
php artisan tinker
查看结果,这样效率更高,然后使用
dd($result)
打印($result)

删除前检查用户,否则将抛出错误验证

$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
    }
$user=user::find($request->id);
如果($user)
{
//返回$user;删除()){
返回“用户已删除”;
}
否则{
返回“有问题”;
}   
}
否则{

return“user not exist”;//谢谢你的提示。我使用了查询生成器(where),它可以工作。然后我尝试user::destroy($id)它返回0。但表中的记录消失。我在id上有一个外键,这是删除工作时我得到零结果的原因吗?$res变量中会有什么?它会返回布尔值-true表示已删除,false表示未删除或删除记录id吗?请确认。谢谢。
$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

$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
    }