接口 新增 成功和失败 该怎么返回呢

$res = User::update($data);
if($res){
    //成功
}else{
    //失败
}

怎么返回才是正确做法呢,总感觉这个判断有点多余

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

其实不用判断,返回值也没必要接收


Model 实例的 update() 调用的是 save(),返回的是布尔值,如果 save() 有问题直接会抛出异常


你这个静态调用 update() 走的是查询构造器,一般会添加 where() 限制条件

查询构造器的 update() 返回受影响的行数,其实也不用担心失败,除非你要判断修改了 0 行


社区这篇帖子 问答:关于数据库事务提交位置的疑惑 中关于 create() 的用法和你情况类似,评论区有丰富的讨论

包括 Laravel 作者 taylorotwell 对类似问题作出的回复(找不到了,找到的话再给你补充)

2年前 评论
ononl 2年前
lddtime (作者) 2年前
miaocansky 2年前
lddtime (作者) 2年前
reiz568569 (楼主) 2年前
讨论数量: 21
$res = User::update($data);

if!User::update($data){
  return 失败
}
//都判断失败 最后返回成功 这样就不用频繁嵌套if else
if (判断是否失败) {
  return 失败
}

if (判断是否失败) {
  return 失败
}

return 成功
2年前 评论

其实不用判断,返回值也没必要接收


Model 实例的 update() 调用的是 save(),返回的是布尔值,如果 save() 有问题直接会抛出异常


你这个静态调用 update() 走的是查询构造器,一般会添加 where() 限制条件

查询构造器的 update() 返回受影响的行数,其实也不用担心失败,除非你要判断修改了 0 行


社区这篇帖子 问答:关于数据库事务提交位置的疑惑 中关于 create() 的用法和你情况类似,评论区有丰富的讨论

包括 Laravel 作者 taylorotwell 对类似问题作出的回复(找不到了,找到的话再给你补充)

2年前 评论
ononl 2年前
lddtime (作者) 2年前
miaocansky 2年前
lddtime (作者) 2年前
reiz568569 (楼主) 2年前

其实你这是tp2.3的写法....

2年前 评论
if (!$res) {
    // 抛异常错误
}
// 正常逻辑接着走
2年前 评论

你要是接口的话肯定得写啊,成功/失败code码,msg成功/失败原因。

2年前 评论
lddtime 2年前
Adachi 2年前
chowjiawei
try{
       User::update($data);
       return [ 
             "message":"成功";
       ];
} catch (\Exception $e) {
       return [ 
                   "message":"错误";
      ];
}
2年前 评论

对于 Eloquent 模型实例的 update() 方法,当有问题时会直接抛出异常。而对于查询构造器的 update() 方法,它返回受影响的行数。这两种情况下,确实都不需要判断返回值来确定更新操作是否成功

Eloquent 模型实例的 update() 方法:

use App\Models\User;

try {
    $user = User::findOrFail($data['id']);
    $user->update($data);
    // 成功
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    // 用户未找到
} catch (\Exception $e) {
    // 更新操作失败,异常已经抛出,可以在此处理
}

查询构造器的 update() 方法:

use App\Models\User;

$affectedRows = User::where('id', $data['id'])->update($data);

if ($affectedRows > 0) {
    // 成功,至少有一行受到影响
} else {
    // 没有行受到影响,可能是因为数据没有变化或找不到对应的记录
}
2年前 评论
reiz568569 (楼主) 2年前

写接口你不封装几个响应方法咱行,封装后就只管丢进去就行了,统一的响应格式,错误编码这些

2年前 评论

helper.php

function result($code , $msg = '操作' ,$data = [] ){
      return json([
              'code'=>$code ? 'succ' : 'error' ,
              'msg'=>$msg . ($code ? '成功' : '失败' ),
              'data'=>$data
      ]);
}

XXController.php

    $user = User::findOrFail($data['id']);
    $user->update($data);

    return result(1,'编辑')
2年前 评论
随波逐流

如果你的接口是 restful 类型的接口, 那么应返回该资更新后的详细信息。

2年前 评论
reiz568569 (楼主) 2年前

我的做法是让他抛出异常,然后在Exceptions里面统一拦截处理,就不用写一大堆try----catch了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!