tp6模型如何判断是否成功操作数据

需求来源

用上tp6,项目开发的时候遇到了大问题……

我怎么知道:
有没有成功新增/修改数据呢?
修改了多少条呢?
如果主键是其他名字那又如何解决这些问题呢?
………………………………

最近终于搞懂了,一一解决了这些问题
借此机会记录一下,免得以后再走弯路emmm……


正文

▲ 插入(save / create)

情况①:new Model后用save(或加个allowField)

$query = new UserModel;
$query->allowField(['id', 'name','phone']) // 视情况而定
      ->save([
          'id' => makeUUID(),
          'name' => '小生蚝',
          'phone' => '13300000000'
      ]);

在这种情况下
虽然官方说的是返回boolean值
但实际上却很奇怪地返回了以下这种东西:

★ 大前提:
①我的model里设置了pkkey_idprotected $pk = 'key_id';
②数据表中的key_id为自增主键,id为36位UUID

{
        "id": "c22cb36e-63f6-166e-8c11-f9b4c292e2a6",
        "name": "小生蚝",
        "phone": "13300000000",
        "key_id": "11"
}

由此我们可以推断出,我们其实是要根据key_id(即“自增主键”)来判断是否插入成功。
(而且这个自增主键居然还是string😒)

情况②:直接 Model::create()

$query = UserModel::create([
    'id' => makeUUID(),
    'name' => '小生蚝',
    'phone' => '13300000000'
]);

因为create是静态方法,返回的是模型的对象实例
所以可以直接 判断自增主键 以确认是否插入成功(但记得要在model里设置主键)

★ 小小建议

其实如果不需要用到模型方法的话,建议还是使用情况②

因为save的未知数太多……
光是文档里就写到说返回true,下面又说返回写入的记录数而不是自增值
(具体可点击查看 官方文档

还不如直接create,反正也能实现字段过滤功能,返回的东西也是和官方一样的


▲ 更新数据(where->save / where->find->save / update)

情况①:Model->where->save

这个方法是最好的了,直接返回有修改的条数,判断是否大于0就行 √

$query = UserModel::where('id', $id)->save(['status' => 0]);

情况②:Model->where->find->save

这个方法有个好处就是可以使用allowField来限制修改列,而情况①则不能
此处返回的是boolean值
但有个弊端❗❗ 此处无论记录是否有修改,只要无error都会返回true
所以还是没办法真正验证是否已修改数据唉……

$query = UserModel::where('id', $_POST['id'])
    ->find()
    ->allowField(['name', 'sex', 'phone', 'email'])
    ->save($_POST);

情况③:update

因为这个是静态方法,也返回的是模型的对象实例
所以没找到什么好的办法判断是否修改成功………………
无解,还是用情况①吧……


后记

请原谅一下一位由初二开始自学php的渣渣高中毕业生的能力……

这篇文章 是我在开发过程中 遇到问题后,解决并测试成功的情况
只不过因高中生的能力有待提高,文中可能有大量bug,请您直接指出或批评亦可
在此也非常感谢各位读者的支持~
祝各位程序猿遇到bug也能顺利解决!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值