您的位置:首页 > 编程语言 > PHP开发

thinkphp3.2 多表事务的实例

2017-08-28 12:16 351 查看
多表事务不同于单表  

1.  需要使用空白的Model 来开启以及使用事务

2.   如果不是在Model里面, 需要使用  $model->table() 来进行insert update delelte操作 , 但是直接D() 操作试验了也是可以的

3. 如果是特定的Mysql链接在实例化 model的时候链接使用     eg :  M('','', 'MYSQL_CRSAPI)

4. 默认不支持嵌套 

$model = M('', '', 'MYSQL_CRSAPI');

try {

// 开启事务
$model->startTrans();

// check id
$id = I('get.id', '' , 'intval');
if (!$id) {
throw new \Exception("请刷新页面后, 再次尝试编辑");
}

// init params
$data = I('post.');
$data['id'] = $id;

// check property
$data = D('AdminApikey')->filterData($data);

// save account
$account_data = [
'owner' => $data['owner'],
'active' => $data['active'],
'apikey' => $data['apikey'],
'validuntil' => $data['validuntil'],
'updated_at' => time(),
];

$account_save_result = $model->table('admin_apikey')->where("id=$id")->save($account_data);

// save account property
if ($account_save_result !== false) {
$field_list = D('DictApictrlFields')
->where('status=1')
->field('name,remark')
->select();

foreach ($field_list as $filed) {
$index = $filed['name'];
$property[$index] = isset($data[$index]) ? $data[$index] : '';
}

$property_result = D('AdminApictrl')->setInfo($id, $property);
}

// save api fields
if (isset($property_result) && $property_result !== false) {
$api_field_result = D('AdminApikeyFields')->updateInfo($id, $data['out_fields']);
}
$account_save_result = false;
//  rollback where add action failed
if ($account_save_result === false || !isset($property_result) || ($property_result === false) || !isset($api_field_result) || ($api_field_result === false)) {
throw new \Exception('账户更新失败, 请重新尝试');
}

} catch (\Exception $e) {

// rollback
$model->rollback();
$this->__Return($e->getMessage());
}

// commit
$model->commit();
$this->__Return('账号更新成功','', 'tip_success');
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: