laravel Eloquent ORM delete()方法

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)->getUser::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);


Sag*_*tam 9

首先,

您应该知道这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)

希望你能理解.