yii框架开启事务

 public function actionAdd()
    {
        $model = new Goods();
        $model->setScenario(‘insert‘);

        if ($model->load(Yii::$app->request->post())) {

            $model->image = UploadedFile::getInstance($model, ‘image‘);

            if ($model->validate()) {

                $model->cover = Yii::$app->security->generateRandomString(10) . ‘.‘ . $model->image->extension;
                if (floatval($model->price_original) < 0.01) {
                    $model->price_original = null;
                }

                $transaction = Yii::$app->db->beginTransaction();
                try {
                    if (!$model->save(false)) {
                        throw new \Exception(‘商品添加失败!‘);
                    }

                    $filename = Yii::getAlias(Yii::$app->params[‘goods.coverPath‘]) . DIRECTORY_SEPARATOR . $model->cover;
                    if (!$model->image->saveAs($filename)) {
                        throw new \Exception(‘封面图片添加失败!‘);
                    }

                    // 记录商品库存
                    $goodsSurplus = new GoodsSurplus();
                    $goodsSurplus->goods_id = $model->id;
                    $goodsSurplus->surplus_before = 0;
                    $goodsSurplus->amount = $model->surplus;
                    $goodsSurplus->surplus_after = $model->surplus;
                    $goodsSurplus->remark = ‘初始化库存。‘;

                    if (!$goodsSurplus->save(false)) {
                        throw new \Exception(‘商品库存记录失败!‘);
                    }

                    $transaction->commit();
                    Yii::$app->session->setFlash(‘success‘, ‘成功添加商品“‘.$model->name.‘”。‘);
                    return $this->refresh();
                } catch (\Exception $e) {
                    $transaction->rollBack();
                    Yii::$app->session->setFlash(‘danger‘, $e->getMessage());
                }
            }
        }

        return $this->render(‘form‘, [
            ‘model‘ => $model
        ]);
    }

时间: 2024-09-30 04:11:55

yii框架开启事务的相关文章

Yii框架数据库多数据库、主从、读写分离

Yii框架数据库多数据库.主从.读写分离 实现 功能描述:1.实现主从数据库读写分离 主库:写 从库(可多个):读2.主数据库无法连接时 可设置从数据库是否 可写3.所有从数据库无法连接时 可设置主数据库是否 可读4.如果从数据库连接失败 可设置N秒内不再连接 利用yii扩展实现: <?php /**  * 主数据库 写 从数据库(可多个)读  * 实现主从数据库 读写分离 主服务器无法连接 从服务器可切换写功能  * 从务器无法连接 主服务器可切换读功  * by lmt  * */ clas

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

                        YII 框架源码分析             百度联盟事业部--黄银锋   目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 2.2.YiiBase 静态类 5 2.3.组件 6 2.4.模块 9 2.5 .App 应用   10 2.6 .WebApp 应用   11 3.系统组件 13 3.1.日志路由组件  13 3.2.Url 管理组件  15 3.3.异常

yii框架数据库操作数据访问对象(DAO)简单总结

Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS).使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码.Yii 的Active Record( AR ),实现了被广泛采用的对象关系映射(ORM)办法,进一步简化数据库编程.按照约定,一个类代表一个表,一个实例代表一行数据.Yii AR消除了大部分用于处理CRUD(创建,

Yii框架下CDataColumn中filter应用+jeditable+pager样式定义应用实例

应用环境在Yii1.1框架下,CDataColumn的filter应用给CGridView带来了极大的方便,可以根据某一字段的值来过滤显示现有的表格数据,这是个重要的功能,可惜一来Yii的中文资料实在不够详细,二来百度出的东西重复的太多,有用的很少.参考很多英文资料后,我把自己写的实例贴出来供大家参考,如果有必要我以后还会陆续贴一些Yii文章出来. filter首先要有自己的数据源,这个可以是当前表格使用的model,也可以是其他一些array,这个实例中我使用了当前model,CGridVie

经验总结55--spring开启事务回滚

使用spring的@Transactional注解,异常时,进行事务回滚. 1.引用 xmlns:tx="http://www.springframework.org/schema/tx" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 2.开启事务 <tx:annotation-driven transaction-manager=&q

YII框架之soap协议的配置跟使用(Webservice)

Yii依靠文档注解(doc comments)和类反射(class reflection)来识别哪个方法可以被远程调用,包括他们的参数和返回值,但目前只能返回字符串,不能返回数组,若返回数组,则为"array";故我将返回值转换为json字符串再返回. 1. 定义Service Provider,服务器端文件代码,WebServerController.php <?php /****************************** * @author sara zhou *

使用Yii框架完整搭建网站流程入门

下载地址: http://www.yiiframework.com/ http://www.yiichina.com/ 由美籍华人薛强研究而出, Yii 这个名字(读作易(Yee))代表 简单(easy), 高效(efficient)和可扩展(extensible). 基于MVC,纯OOP,强大 基本配置要求:数据库:mysql,php5.0.1以上:pdo,[图片等需开启gd库模块] 下载完成,解压后,通过127.0.0.1或localhost访问其文件夹,可以查看requirements文件

Yii 框架中安装 memcache 及配置和测试

安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/)   一定要根据自己的php版本以及Thread Safety来下载相应的php_memcache.dll,Thread Safety可以在   phpinfo()中查看,enabled表示ts版