ChatGPT解决这个技术问题 Extra ChatGPT

laravel Eloquent ORM delete() 方法

嗨,我正在学习 laravel。我使用 Eloquent ORM 删除方法,但得到不同的结果。不是真或假,而是空。我设置了一个资源路由,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。

我的代码有错误吗?

你能告诉我一些其他方法,当我从数据库中删除数据时,我可以获得布尔结果吗?


M
Mel

我认为您可以更改查询并尝试如下:

$res=User::where('id',$id)->delete();

$res 变量中会有什么?它会返回布尔值 - true 表示已删除,false 表示未删除或删除记录 id?请确认。谢谢。
如果我有模型本身怎么办?像 $file 对象?
在幕后 $res=User::where('id',$id)->delete(); 将是 2 个查询还是 1 个?
E
Evol Rof

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

对实例集合调用 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);


S
Sagar Gautam

首先,

您应该知道 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'
    ];

}

希望你能理解。


感谢您的注意。我使用查询生成器(在哪里)并且它有效。然后我尝试 User::destroy($id) 它返回 0。但是表中的记录消失了。我在 id 上有一个外键,是吗删除工作时我得到零结果的原因是什么?
A
Abdelsalam Shahlol

Laravel Eloquent 提供了 destroy() 函数,其中返回 boolean 值。因此,如果数据库中存在记录并删除,您将获得 true,否则为 false

这是一个使用 Laravel Tinker shell 的示例。

https://i.stack.imgur.com/6RtQY.png

在这种情况下,您的代码应如下所示:

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 Deleting Models的更多信息


P
Paul Roub
$model=User::where('id',$id)->delete();

ß
ßãlãjî

在删除用户之前检查,否则会引发错误异常

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

M
M Umer Yasin

您可以使用两种方式删除数据。首先,使用 find 第二,使用 where 和 model 你可以尝试这样的事情。第一的:

User::find($id)->destroy();

或第二种方式

User::where('id', $id)->delete();

现在请尝试它会返回真/假结果。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅