代码之家  ›  专栏  ›  技术社区  ›  Evol Rof

laravel Eloquent ORM delete()方法

  •  66
  • Evol Rof  · 技术社区  · 7 年前

    我使用了雄辩的ORM删除方法,但得到了不同的结果。非真或假,但为空。 我设置了一个资源路由,UsersController中有一个销毁方法。

    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”},数据库中的记录被删除。

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

    我的代码有错误吗?

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

    7 回复  |  直到 7 年前
        1
  •  115
  •   Mel    6 年前

    我认为您可以更改查询,然后像这样尝试:

    $res=User::where('id',$id)->delete();
    
        2
  •  35
  •   Evol Rof    4 年前

    之前 delete laravel中有几种方法。

    User::find(1) User::first() 返回实例。

    User::where('id',1)->get User::all() 返回实例的集合。

    呼叫 true/false

    $user=User::find(1);
    $user->delete(); //returns true/false
    

    呼叫 删去

    //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
  •  18
  •   Sagar Gautam    7 年前

    一开始

    你应该知道 destroy() delete()

    在您的情况下,您并没有检查数据库中是否存在记录。记录只有在存在时才能删除。

    $user = User::find($id);
        if($user){
            $destroy = User::destroy(2);
        }
    

    价值或 $destroy $data 类似阵列:

    if ($destroy){
    
        $data=[
            'status'=>'1',
            'msg'=>'success'
        ];
    
    }else{
    
        $data=[
            'status'=>'0',
            'msg'=>'fail'
        ];
    
    }
    

    希望,你明白。

        4
  •  4
  •   Abdelsalam Shahlol Rohit Martires    3 年前

    雄辩的提供 destroy() 返回的函数 boolean 价值如果有记录 存在 在数据库和 你会得到 true 否则 false .

    Laravel Tinker外壳

    delete operation result

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

    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

        5
  •  3
  •   Paul Roub Mark Dail    4 年前
    $model=User::where('id',$id)->delete();
    
        6
  •  2
  •   ßãlãjî    3 年前

    $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
        }
    
        7
  •  1
  •   M Umer Yasin    2 年前

    首先,使用 第二,使用 哪里 你可以试试这样的。 第一:

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

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

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