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

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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


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


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

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


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

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

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

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

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

return 成功
1年前 评论

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


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


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

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


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

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

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

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

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

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

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

对于 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 {
    // 没有行受到影响,可能是因为数据没有变化或找不到对应的记录
}
1年前 评论
reiz568569 (楼主) 1年前

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

1年前 评论

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,'编辑')
1年前 评论
随波逐流

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

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

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

1年前 评论

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