用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3111|回复: 6
收起左侧

[讨论/交流] 想问一个对多模型中的MySQL事务处理办法

[复制链接]
发表于 2011-3-4 11:10:22 | 显示全部楼层 |阅读模式
控制器调用多个模型,每个模型中都有数据库操作

如何实现?

在控制器用可以db->tran_start()
但要每个模型中,如何调用数据库操作呢?
$CI->db->query("?")

这个?


----------------------------------

如何是多数据库操作,又怎么办呢?
发表于 2011-3-4 14:51:25 | 显示全部楼层
->trans_start()
->model1->func()
->model2->func()
->model3->func()
if(->trans_commit())echo 'ok';
else echo 'no ok';
多库用规范写法:数据库名.数据表名.字段名 操作
 楼主| 发表于 2011-3-4 17:31:06 | 显示全部楼层
->trans_start()
->model1->func()
->model2->func()
->model3->func()
if(->trans_commit())echo 'ok';
el ...
visvoy 发表于 2011-3-4 14:51



    我其实想问的是model1->func()  这个函数中用到的DB链接还是$this->db 么?

那如果是多数据库操作每一个都得new 一下再用,那最后控制器中的DB还是同一个链接了吗?
每个模型中都得
$DB1 = $this->load->database('db1',TRUE);

最后在控制器中
还得
$DB1 = $this->load->database('db1',TRUE);

这一路下来,估计已经不是同一个事务流程了吧?
发表于 2011-3-4 22:12:34 | 显示全部楼层
一个事物还要跨多个模型。。。我觉得这不是一个好的设计。
 楼主| 发表于 2011-3-5 21:47:51 | 显示全部楼层
一个事物还要跨多个模型。。。我觉得这不是一个好的设计。
Hex 发表于 2011-3-4 22:12



   做的网页游戏里面还是会有很多的这种情况的

比方说:购买道具并发放的控制器
就得调用 货币的模型,扣钱
完成这个之后,紧接着还得调用发送道具的模型

这两个模型都有数据库操作,但还得成一个事务来处理。。。。

所以还是有些头痛。。。
发表于 2011-3-5 22:15:51 | 显示全部楼层
做的网页游戏里面还是会有很多的这种情况的

比方说:购买道具并发放的控制器
就得调用 货币的模型, ...
jet66 发表于 2011-3-5 21:47



    这应该放到一个模型里来做,这是一个原子操作。不同系统要根据实际情况设计。
 楼主| 发表于 2011-3-7 16:07:56 | 显示全部楼层
这应该放到一个模型里来做,这是一个原子操作。不同系统要根据实际情况设计。 ...
Hex 发表于 2011-3-5 22:15



   放到一个模型里面,就容易所有模型都在一个模型里面。。OO对象很不清晰。。。。

本版积分规则