当前位置: 首页 > 知识库问答 >
问题:

laravel雄辩的ORM delete()方法

西门正平
2023-03-14

嗨,我正在学习laravel。我使用雄辩的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”},数据库中的记录被删除。

然后我使用dd($res)。它在页面中显示null。

但是从课程中我学习到它返回一个布尔值true或false。

我的代码有错误吗?

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

共有3个答案

麹高义
2023-03-14

一开始

您应该知道destroy()是通过对象或模型直接删除实体的正确方法,并且delete()只能在查询生成器中调用。

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

所以,你可以这样做。

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

在失败或成功时,上面的值或$销毁将分别为0或1。因此,您可以更改$data数组,如:

if ($destroy){

    $data=[
        'status'=>'1',
        'msg'=>'success'
    ];

}else{

    $data=[
        'status'=>'0',
        'msg'=>'fail'
    ];

}

希望,你明白。

颛孙建业
2023-03-14

在删除之前,laravel中有几种方法。

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

用户::其中('id',1)-

在模型实例上调用删除将返回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)  ) 

还有其他的delete方法,您可以调用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)打印($result)

宿衡虑
2023-03-14

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

$res=User::where('id',$id)->delete();
 类似资料:
  • 我在使用laravel雄辩的ORM时遇到了一个问题。 基本上,我正在获取与用户相关的帖子,以及他的评论,但是,我正在尝试集成某种分页(我一次只想取5个帖子)。 而使用跳过方法,我总是得到以下laravel错误: 方法skip不存在。 这是我实际使用的代码片段。 有人能给我任何帮助吗? 帐户模型检索与用户相关的帖子模型(关系),但是,我想一次只收到5个帖子,用于基于ajax的请求。

  • 我是新来的拉威尔,我曾在codeigniter工作。我对雄辩的ORM概念着迷。我有一个关于雄辩能力的一般性问题。ORM的功能是什么,我的意思是我们可以获得相关表行的级别。如果你看“http://four.laravel.com/docs/eloquent#relationships 一对一 一对多 多对多 多态关系 在我看来,“一对一”意味着一级。表1表2

  • 在有说服力的ORM上,是否有一种较短的方法在Laravel中插入数据? 目前我正在这样做: 就像你看到的,所有的列都像属性一样命名。 我知道您可以将对象与all()函数和fetch()一起使用。但是我从另一个对象(soap服务器)获取数据。 有没有办法转换这个?也许在模型上?

  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 嘿,伙计们,我是拉威尔的新朋友。我有这张桌子 我如何能够获取每个科目的is_correct列计数? 谢谢伙计们!

  • 问题内容: 我正在尝试使用Eloquent在数据库种子期间执行以下查询: 这是我在Eloquent中的实现: 尽管第一个查询始终返回完整结果,但Eloquent等价项始终为表的和字段以外的所有内容返回空元素。由于和模型都是工匠生成的骨架,因此我无所适从。 例如: 这是当我对种子(最初由Faker生成)的第一个口才查询dd()时输出的数组: 问题答案: 可以通过指定特定表中所需的特定列名来解决,如下