成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii2多模型與事務的用法

BigNerdCoding / 3166人閱讀

摘要:目的分析通過實戰(zhàn),分享多模型與事務的簡單用法。多模型驗證數(shù)據(jù)全部通過后才能保存數(shù)據(jù),否則保存失敗事務保存數(shù)據(jù)遇到異常會把原來已保存的數(shù)據(jù)撤銷。多模型表與表之間無聯(lián)系,事務表與表之間要有聯(lián)系。相關資料多模型的復合表單事務事務什么情況使用

前言

Yii2的多模型與事務平時用的也挺多的,但是網(wǎng)上現(xiàn)有的資源不多,為此我覺得有必要做個總結與分享,雷鋒同志的一貫作風,不做解釋。在利用大伙喝咖啡的時間我親自下海實戰(zhàn)了,實踐出真知,不耍嘴皮子,拿經(jīng)驗說事。OK,Stop,要是不感興趣的呢可以不看了,要是感興趣的呢可以繼續(xù)往下看,絕對讓你收獲頗豐哈哈。

目的分析

通過實戰(zhàn),分享Yii2多模型與事務的簡單用法。

多模型

1、controller部分

    public function actionCreate()
    {
        $model = new OpportunityType();
        $_model=new User();
        $post=Yii::$app->request->post();
        if(isset($post["User"]) && isset($post["OpportunityType"]))
       {  
            $model->attributes=$post["OpportunityType"];  
            $_model->attributes=$post["User"]; 
            if($model->validate() && $_model->validate())//這里是先驗證數(shù)據(jù),如果通過再save()。  
             {      
                  $model->save(false); //保存不驗證(前面已經(jīng)驗證了,所以此處可以設為false)
                  $_model->save(false);
                  return $this->redirect(["view", "id" => $model->id]);
             }else {
                return $this->render("create", [
                    "model" => $model,
                    "_model"=>$_model,
                ]);
            } 
       
        } else {
            return $this->render("create", [
                "model" => $model,
                "_model"=>$_model,
            ]);
        }
    }

2、view部分

"sales-form",
    "enableAjaxValidation" => true,
    "enableClientValidation" => true,
]);
    ?>
    field($model, "jhlx")->textInput(["maxlength" => true]) ?>

    field($model, "company_id")->textInput(["maxlength" => true]) ?>


    field($model, "sort")->textInput() ?>

    field($_model, "username")->textInput(["maxlength" => true]) ?>

    
isNewRecord ? Yii::t("app", "Create") : Yii::t("app", "Update"), ["class" => $model->isNewRecord ? "btn btn-success" : "btn btn-primary"]) ?>

注:此部分是多模型的使用,當OpportunityType和User兩個驗證通過之后才能保存數(shù)據(jù)。

事務

1、controller部分

   public function actionCreate()
    {
        $model = new OpportunityType();
        $_model=new User();
        $post=Yii::$app->request->post();

        if(isset($post["User"]) && isset($post["OpportunityType"]))
       {   
            $db = Yii::$app->db;
            $transaction = $db->beginTransaction();  //開啟事務
            try {
                $model->attributes=$post["OpportunityType"];  
                $_model->attributes=$post["User"];
                if($_model->save())//這里是先驗證數(shù)據(jù),如果通過再save()。  
                 {      
                     $model->user_id=$_model->id;
                     if(!$model->save()){
                         $error=array_values($model->getFirstErrors())[0];
                         throw new Exception($error);//拋出異常
                     }
                     
                 }else{
                    $error=array_values($_model->getFirstErrors())[0];
                    throw new Exception($error);//拋出異常
                 }  
                // 提交記錄(執(zhí)行事務)
               $transaction->commit();
               return $this->redirect(["view", "id" => $model->id]);
             } catch (Exception $e) {   
                // 記錄回滾(事務回滾)
                $transaction->rollBack();
                Yii::$app->session->setFlash("error",$e->getMessage());
                return $this->render("create", [
                            "model" => $model,
                            "_model"=>$_model,
                        ]);
            }
        } else {
            return $this->render("create", [
                "model" => $model,
                "_model"=>$_model,
            ]);
        }
    }

注:要想事務回滾,必須拋出異常。
2、view部分還是和多模型的一樣,此處省略。

總結分析

1、多模型與model有聯(lián)系,事務與數(shù)據(jù)庫有聯(lián)系。
2、多模型model驗證數(shù)據(jù)全部通過后才能保存數(shù)據(jù),否則保存失??;事務保存數(shù)據(jù)遇到異常會把原來已保存的數(shù)據(jù)撤銷。
3、多模型表與表之間無聯(lián)系,事務表與表之間要有聯(lián)系。

附加

isset與empty的區(qū)別
1、isset($var)判斷變量是否設置,empty($var)判斷變量是否為空!
如$one已經(jīng)定義沒有值,isset($one)返回true,判斷存在;empty($one)判斷為空,判斷存在,同樣返回true。
如$one定義為null,isset($one)返回false;empty($one)返回true(重要區(qū)別)。
2、empty比isset范圍更廣,進一步說isset更為精確。

相關資料

多模型的復合表單
事務(Transaction)
Yii事務什么情況使用?

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30364.html

相關文章

  • Yii2模型事務用法

    摘要:目的分析通過實戰(zhàn),分享多模型與事務的簡單用法。多模型驗證數(shù)據(jù)全部通過后才能保存數(shù)據(jù),否則保存失敗事務保存數(shù)據(jù)遇到異常會把原來已保存的數(shù)據(jù)撤銷。多模型表與表之間無聯(lián)系,事務表與表之間要有聯(lián)系。相關資料多模型的復合表單事務事務什么情況使用 前言 Yii2的多模型與事務平時用的也挺多的,但是網(wǎng)上現(xiàn)有的資源不多,為此我覺得有必要做個總結與分享,雷鋒同志的一貫作風,不做解釋。在利用大伙喝咖啡的時...

    rubyshen 評論0 收藏0
  • 基于Yii2應用開發(fā)引擎RageFrame

    摘要:多入口模式,多入口分為后臺前端,微信,其他或接口對接,不同的業(yè)務不同的設備進入不同的入口。對接微信公眾號,使用了一款優(yōu)秀的微信非官方,系統(tǒng)內(nèi)已集成了該,調(diào)用方式會在文檔說明,也可直接看其文檔進入深入開發(fā)。 RageFrame 為二次開發(fā)而生,讓開發(fā)變得更簡單。 前言 RageFrame項目創(chuàng)建于2016年4月16日,基于Yii2框架開發(fā)的應用開發(fā)引擎,目前正在成長中,目的是為了集成更多...

    enda 評論0 收藏0
  • Yii2中hasOne、hasMany以及關聯(lián)查詢用法

    摘要:前言是特有的用于多表關聯(lián)查詢的函數(shù),平時在使用多表關聯(lián)查詢的時候建議使用它們。需求分析使用一條查詢語句就能把列表的數(shù)據(jù)全部展現(xiàn)出來,列表包含一對一,一對多,以及多對多的關系。不能破壞自有的表頭排序功能,以及中的存值。相關資料中多表關聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關聯(lián)查詢的函數(shù),平時在使用多表關聯(lián)查詢的時候建議使用它們。為什么?因為這種方式關聯(lián)查詢出來...

    qc1iu 評論0 收藏0
  • Yii2中hasOne、hasMany以及關聯(lián)查詢用法

    摘要:前言是特有的用于多表關聯(lián)查詢的函數(shù),平時在使用多表關聯(lián)查詢的時候建議使用它們。需求分析使用一條查詢語句就能把列表的數(shù)據(jù)全部展現(xiàn)出來,列表包含一對一,一對多,以及多對多的關系。不能破壞自有的表頭排序功能,以及中的存值。相關資料中多表關聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關聯(lián)查詢的函數(shù),平時在使用多表關聯(lián)查詢的時候建議使用它們。為什么?因為這種方式關聯(lián)查詢出來...

    lmxdawn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<