摘要:目的分析通過(guò)實(shí)戰(zhàn),分享多模型與事務(wù)的簡(jiǎn)單用法。多模型驗(yàn)證數(shù)據(jù)全部通過(guò)后才能保存數(shù)據(jù),否則保存失敗事務(wù)保存數(shù)據(jù)遇到異常會(huì)把原來(lái)已保存的數(shù)據(jù)撤銷。多模型表與表之間無(wú)聯(lián)系,事務(wù)表與表之間要有聯(lián)系。相關(guān)資料多模型的復(fù)合表單事務(wù)事務(wù)什么情況使用
前言
Yii2的多模型與事務(wù)平時(shí)用的也挺多的,但是網(wǎng)上現(xiàn)有的資源不多,為此我覺(jué)得有必要做個(gè)總結(jié)與分享,雷鋒同志的一貫作風(fēng),不做解釋。在利用大伙喝咖啡的時(shí)間我親自下海實(shí)戰(zhàn)了,實(shí)踐出真知,不耍嘴皮子,拿經(jīng)驗(yàn)說(shuō)事。OK,Stop,要是不感興趣的呢可以不看了,要是感興趣的呢可以繼續(xù)往下看,絕對(duì)讓你收獲頗豐哈哈。
目的分析通過(guò)實(shí)戰(zhàn),分享Yii2多模型與事務(wù)的簡(jiǎn)單用法。
多模型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())//這里是先驗(yàn)證數(shù)據(jù),如果通過(guò)再save()。 { $model->save(false); //保存不驗(yàn)證(前面已經(jīng)驗(yàn)證了,所以此處可以設(shè)為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, ]); ?> = $form->field($model, "jhlx")->textInput(["maxlength" => true]) ?> = $form->field($model, "company_id")->textInput(["maxlength" => true]) ?> = $form->field($model, "sort")->textInput() ?> = $form->field($_model, "username")->textInput(["maxlength" => true]) ?>= Html::submitButton($model->isNewRecord ? Yii::t("app", "Create") : Yii::t("app", "Update"), ["class" => $model->isNewRecord ? "btn btn-success" : "btn btn-primary"]) ?>
注:此部分是多模型的使用,當(dāng)OpportunityType和User兩個(gè)驗(yàn)證通過(guò)之后才能保存數(shù)據(jù)。
事務(wù)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(); //開(kāi)啟事務(wù) try { $model->attributes=$post["OpportunityType"]; $_model->attributes=$post["User"]; if($_model->save())//這里是先驗(yàn)證數(shù)據(jù),如果通過(guò)再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í)行事務(wù)) $transaction->commit(); return $this->redirect(["view", "id" => $model->id]); } catch (Exception $e) { // 記錄回滾(事務(wù)回滾) $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, ]); } }
注:要想事務(wù)回滾,必須拋出異常。
2、view部分還是和多模型的一樣,此處省略。
1、多模型與model有聯(lián)系,事務(wù)與數(shù)據(jù)庫(kù)有聯(lián)系。
2、多模型model驗(yàn)證數(shù)據(jù)全部通過(guò)后才能保存數(shù)據(jù),否則保存失敗;事務(wù)保存數(shù)據(jù)遇到異常會(huì)把原來(lái)已保存的數(shù)據(jù)撤銷。
3、多模型表與表之間無(wú)聯(lián)系,事務(wù)表與表之間要有聯(lián)系。
isset與empty的區(qū)別
1、isset($var)判斷變量是否設(shè)置,empty($var)判斷變量是否為空!
如$one已經(jīng)定義沒(méi)有值,isset($one)返回true,判斷存在;empty($one)判斷為空,判斷存在,同樣返回true。
如$one定義為null,isset($one)返回false;empty($one)返回true(重要區(qū)別)。
2、empty比isset范圍更廣,進(jìn)一步說(shuō)isset更為精確。
多模型的復(fù)合表單
事務(wù)(Transaction)
Yii事務(wù)什么情況使用?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65068.html
摘要:目的分析通過(guò)實(shí)戰(zhàn),分享多模型與事務(wù)的簡(jiǎn)單用法。多模型驗(yàn)證數(shù)據(jù)全部通過(guò)后才能保存數(shù)據(jù),否則保存失敗事務(wù)保存數(shù)據(jù)遇到異常會(huì)把原來(lái)已保存的數(shù)據(jù)撤銷。多模型表與表之間無(wú)聯(lián)系,事務(wù)表與表之間要有聯(lián)系。相關(guān)資料多模型的復(fù)合表單事務(wù)事務(wù)什么情況使用 前言 Yii2的多模型與事務(wù)平時(shí)用的也挺多的,但是網(wǎng)上現(xiàn)有的資源不多,為此我覺(jué)得有必要做個(gè)總結(jié)與分享,雷鋒同志的一貫作風(fēng),不做解釋。在利用大伙喝咖啡的時(shí)...
摘要:多入口模式,多入口分為后臺(tái)前端,微信,其他或接口對(duì)接,不同的業(yè)務(wù)不同的設(shè)備進(jìn)入不同的入口。對(duì)接微信公眾號(hào),使用了一款優(yōu)秀的微信非官方,系統(tǒng)內(nèi)已集成了該,調(diào)用方式會(huì)在文檔說(shuō)明,也可直接看其文檔進(jìn)入深入開(kāi)發(fā)。 RageFrame 為二次開(kāi)發(fā)而生,讓開(kāi)發(fā)變得更簡(jiǎn)單。 前言 RageFrame項(xiàng)目創(chuàng)建于2016年4月16日,基于Yii2框架開(kāi)發(fā)的應(yīng)用開(kāi)發(fā)引擎,目前正在成長(zhǎng)中,目的是為了集成更多...
摘要:前言是特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時(shí)在使用多表關(guān)聯(lián)查詢的時(shí)候建議使用它們。需求分析使用一條查詢語(yǔ)句就能把列表的數(shù)據(jù)全部展現(xiàn)出來(lái),列表包含一對(duì)一,一對(duì)多,以及多對(duì)多的關(guān)系。不能破壞自有的表頭排序功能,以及中的存值。相關(guān)資料中多表關(guān)聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時(shí)在使用多表關(guān)聯(lián)查詢的時(shí)候建議使用它們。為什么?因?yàn)檫@種方式關(guān)聯(lián)查詢出來(lái)...
摘要:前言是特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時(shí)在使用多表關(guān)聯(lián)查詢的時(shí)候建議使用它們。需求分析使用一條查詢語(yǔ)句就能把列表的數(shù)據(jù)全部展現(xiàn)出來(lái),列表包含一對(duì)一,一對(duì)多,以及多對(duì)多的關(guān)系。不能破壞自有的表頭排序功能,以及中的存值。相關(guān)資料中多表關(guān)聯(lián)查詢 前言 hasOne、hasMany是Yii2特有的用于多表關(guān)聯(lián)查詢的函數(shù),平時(shí)在使用多表關(guān)聯(lián)查詢的時(shí)候建議使用它們。為什么?因?yàn)檫@種方式關(guān)聯(lián)查詢出來(lái)...
閱讀 3834·2021-09-27 13:56
閱讀 881·2021-09-08 09:36
閱讀 765·2019-08-30 15:54
閱讀 609·2019-08-29 17:29
閱讀 927·2019-08-29 17:21
閱讀 1684·2019-08-29 16:59
閱讀 2757·2019-08-29 13:03
閱讀 2964·2019-08-29 12:47