这篇文章记录使用tp6的一些问题
迷惑我双眼的事务问题
今天在使用事务的时候,需要写入多张表,其中有一张表的 uuid写不进去,但是其他几张表写入成功,让我一度的怀疑人生。我怀疑自己使用的方式有问题,于是换了三种使用事务的方法,但是save() 始终返回的都是 true,数据库却没更新成功。沉默了几分钟后,我决定打开xdebug。
先放一下我的配置
protected $schema; 这个模型属性没有包含我需要更新的那个字段
protected $updateTime = 'updatetime'; 自动时间戳
经过我的梭哈发现了问题,放一下大概调用流程
$memberModel = new Member();
$members = $memberModel->find(1);
$members->uuid = '666';
$member->save();
以下是save() 执行的调用链
save()
updateData() 这是真正更新的方法
checkAllowFields() 这里检测字段是否允许写入
update() 最后走到这个方法,我需要修改的字段还是存在的
parseData() 数据分析功能,经过这个方法的梭哈把我需要更新字段梭哈掉了。剩下需要更新的字段 就是自动时间戳
最终生成的SQL
UPDATE ts_member SET updatetime = 1678016650
所以事务是没有问题的,更新也是没有问题的。删除$schema属性,或者在属性中加上这个字段就好了。so 为什么我不直接去看SQL日志了?sb了!!! 感觉这种应该提示一下 $schema属性中不存在 uuid 字段。这样我也不用调试代码了。
续:仔细思考了下确实是自己使用的问题,这不是orm设计的问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。