【问题标题】:Laravel Query builder Delete Item NotificationLaravel 查询构建器删除项目通知
【发布时间】:2015-12-15 03:03:09
【问题描述】:

我正在尝试根据输入数据从 Laravel 4.2 查询中名为 project 的表中删除一个条目。

我所做的是-

 DB::table('project')->where('project.id', '=', Input::get('id'))->delete();

但问题是,我怎么知道数据是否被删除?

有人可以帮忙吗?

【问题讨论】:

  • 当你使用 laravel 的 delete() 函数时,它实际上会删除数据。

标签: php laravel laravel-4 laravel-5 query-builder


【解决方案1】:
$id = Input::get('id');
$entryObj = ProjectModel::findorfail($id); // Assuming you have model
// It's bad practise to delete on DB:table because you won't be able to use 
//soft-deletes or observers won't trigger if you don't use models.

if($entryObj){
    if(!$entryObj->delete()){
        throw new Exception('Now we know that it failed to delete');
    }else{
         echo "100% record is deleted.";
    }
}

但是假设在这种情况下你不关心模型/观察者/软删除

if(DB::table('project')->where('project.id', '=', Input::get('id'))->delete()){
   echo "successfully deleted";
}

请注意,这是非常非常非常糟糕的做法,首先我们没有测试 Input::get('id') 里面可能是大象或猫,或者假设它应该有 userId=1 但因为他们想弄乱他们在客户端 html 上修改的数据,说它是 50。用户 50 的数据轰然出现,如果你仔细想想,这将是一场灾难。

忘了说快捷方式

如果是id也可以使用

ProjectModel::destroy($id); //to delete

【讨论】:

  • delete() 的返回值是否表示操作成功,或者数据实际上已从表中删除? MySQL 可以在删除时返回 true,即使实际上没有被删除。
  • 当你使用 laravel 的 delete() 函数时,它会从字面上删除数据。
  • ->delete() 是 laravel 框架删除数据的功能,它只返回 true 或 false。
【解决方案2】:

delete 语句返回受影响的记录数。因此,您可以检查返回值是否大于零。在您的情况下,假设 id 是唯一的,它应该始终为 1。所以一个 if 语句 if equals one then delete 是成功的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多