yii2增刪改查及AR的理解

yii2增刪改查


// 返回 id 為 1 的客戶 $customer = Customer::findOne(1);

// 返回 id 為 1 且狀態為 *active* 的客戶 $customer = Customer::findOne([ 'id' => 1, 'status' => Customer::STATUS_ACTIVE, ]);

// 返回id為1、2、3的一組客戶 $customers = Customer::findAll([1, 2, 3]);

// 返回所有狀態為 "deleted" 的客戶 $customer = Customer::findAll([ 'status' => Customer::STATUS_DELETED, ]);


// 插入新客戶的記錄 $customer = new Customer(); $customer->name = 'James'; $customer->email = 'james@example.com'; $customer->save();

// 等同于 $customer->insert();

$id = $model->attributes['id'];

Yii::$app->db->getLastInsertID()

?

// 更新現有客戶記錄 $customer = Customer::findOne($id); $customer->email = 'james@example.com'; $customer->save();

// 等同于 $customer->update();

?

// 刪除已有客戶記錄 $customer = Customer::findOne($id); $customer->delete();

// 刪除多個年齡大于20,性別為男(Male)的客戶記錄 Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']); // 所有客戶的age(年齡)字段加1: Customer::updateAllCounters(['age' => 1]);

須知:save() 方法會調用 insert()update() 中的一個, 用哪個取決于當前 AR 對象是不是新對象(在函數內部,他會檢查 yii\db\ActiveRecord::isNewRecord 的值)。
若 AR 對象是由 new 操作符 初始化出來的,save() 方法會在表里插入一條數據; 如果一個 AR 是由 find() 方法獲取來的, 則 save()更新表里的對應行記錄。

// 新建一條記錄 $model = new Customer; if ($model->load(Yii::$app->request->post()) && $model->save()) { // 獲取用戶輸入的數據,驗證并保存 } // 更新主鍵為$id的AR $model = Customer::findOne($id); if ($model === null) { throw new NotFoundHttpException; } if ($model->load(Yii::$app->request->post()) && $model->save()) { // 獲取用戶輸入的數據,驗證并保存 }

對AR的理解

AR的生命周期

理解AR的生命周期對于你操作數據庫非常重要。生命周期通常都會有些典型的事件存在。對于開發AR的behaviors來說非常有用。

當你實例化一個新的AR對象時,我們將獲得如下的生命周期:

  1. constructor

  2. yii\db\ActiveRecord::init(): 會觸發一個 yii\db\ActiveRecord::EVENT_INIT 事件

當你通過 find() 方法查詢數據時,每個AR實例都將有以下生命周期:

  1. constructor

  2. yii\db\ActiveRecord::init(): 會觸發一個 yii\db\ActiveRecord::EVENT_INIT 事件

  3. yii\db\ActiveRecord::afterFind(): 會觸發一個 yii\db\ActiveRecord::EVENT_AFTER_FIND 事件

當通過 yii\db\ActiveRecord::save() 方法寫入或者更新數據時, 我們將獲得如下生命周期:

  1. yii\db\ActiveRecord::beforeValidate(): 會觸發一個 yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件

  2. yii\db\ActiveRecord::afterValidate(): 會觸發一個 yii\db\ActiveRecord::EVENT_AFTER_VALIDATE 事件

  3. yii\db\ActiveRecord::beforeSave(): 會觸發一個 yii\db\ActiveRecord::EVENT_BEFORE_INSERT 或 yii\db\ActiveRecord::EVENT_BEFORE_UPDATE 事件

  4. 執行實際的數據寫入或更新

  5. yii\db\ActiveRecord::afterSave(): 會觸發一個 yii\db\ActiveRecord::EVENT_AFTER_INSERT 或 yii\db\ActiveRecord::EVENT_AFTER_UPDATE 事件

最后,當調用 delete() 刪除數據時, 我們將獲得如下生命周期:

  1. yii\db\ActiveRecord::beforeDelete(): 會觸發一個 yii\db\ActiveRecord::EVENT_BEFORE_DELETE 事件

  2. 執行實際的數據刪除

  3. yii\db\ActiveRecord::afterDelete(): 會觸發一個 yii\db\ActiveRecord::EVENT_AFTER_DELETE 事件

轉載于:https://www.cnblogs.com/xiong63/p/6553692.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372690.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GWT和HTML5 Canvas演示

這是我對GWT和HTML5 Canvas的第一個實驗。 我的第一個嘗試是創建矩形,僅用幾行代碼就得出了這樣的內容: 碼: public class GwtHtml5 implements EntryPoint {static final String canvasHolderId "canvasholder";static final St…

mysql 平均值 排序_MySQL按平均兩個平均值排序

我正在競賽網站上工作,有兩種類型的用戶,普通網站成員和評委.每個人都可以使用拖放工具按照他們選擇的順序對特定比賽中的條目進行排序.完成后,相關的條目ID將附加一個排名值,然后可用于確定比賽中哪個條目獲得最高的平均分數.獲勝者實際上將通過平均每組的平均值來確定.我希望…

Solr管理界面詳解

轉載于:https://www.cnblogs.com/gslblog/p/6553813.html

iconv編碼轉換指令

看到一個不錯的指令iconv,可以對文件編碼進行轉換,記錄如下: iconv --list 列出所有支持轉換的編碼 icon -f code1 -t code2 filename -o newfile -f 即from 原來的編碼 -t 即to 新的編碼 filename 待轉換的文件名 -o newfile 要輸出的文件名 轉載于:htt…

使用Spring Roo進行快速云開發–第2部分:VMware Cloud Foundry

Spring Roo是在Java平臺上提供快速應用程序開發的工具。 我已經解釋了何時使用它: http : //www.kai-waehner.de/blog/2011/04/05/when-to-use-spring-roo 。 Spring Roo目前支持兩種針對云計算的解決方案:Google App Engine(GAE)…

java程序日期轉換_Java 日期轉換詳解及實例代碼

Java 日期轉換涉及的核心類:Date類、SimpleDateFormat類、Calendar類一、 Date型與long型Date型轉換為long型Date date new Date();//取得當前時間Date類型long date2long date.getTime();//Date轉longlong型轉換為Date型long cur System.currentTimeMills();//取…

軟件設計之思想

編程用何種語言不重要,重要的是其設計思想。轉載于:https://www.cnblogs.com/redfull/p/6554898.html

asp.net 與 java 2017_[ASP.net教程]C#與JAVA學習感悟

[ASP.net教程]C#與JAVA學習感悟0 2015-10-06 23:00:07C#與JAVA學習感悟學完C#與JAVA,感覺收獲良多。C#與JAVA這兩門語言相似度很高(了解它們早期歷史的人可能知道為什么),也許很多人在學習JAVA(或C#)時會同時學習C#(或JAVA),因為它們太相似了…

Spring和JSF集成:國際化和本地化

如果您正在開發針對多種語言的JSF應用程序&#xff0c;那么您可能很熟悉<f&#xff1a;loadBundle>標記。 即使您的應用程序不支持使用消息包的國際化仍然是一個好主意。 在<f&#xff1a;loadBundle>標記下&#xff0c;它從Java java.util.ResourceBundle中讀取消…

一個實用的卻被忽略的命名空間:Microsoft.VisualBasic:

當你看到這個命名空間的時候&#xff0c;別因為是vb的東西就匆忙關掉網頁&#xff0c;那將會是您的損失&#xff0c;此命名空間中的資源最初目的是為了簡化vb.net開發而創建的&#xff0c;所以microsoft.visualbasic并不屬于system命名空間&#xff0c;而是獨立存在的。雖然是為…

Linux基礎之命令練習Day2-useradd(mod,del),groupadd(mod,del),chmod,chown,

作業一&#xff1a; 1) 新建用戶natasha&#xff0c;uid為1000&#xff0c;gid為555&#xff0c;備注信息為“master” 2) 修改natasha用戶的家目錄為/Natasha 3) 查看用戶信息配置文件的最后一行 4) 為natasha用戶設置密碼“123” 5) 查看用戶密碼配置文件的最后一行 6) 將nat…

動態表單,JSF世界早已等待

新的PrimeFaces擴展版本0.5.0帶來了新的DynaForm組件。 通常&#xff0c;如果知道行/列的數量&#xff0c;元素的位置等&#xff0c;則可以通過h&#xff1a;panelGrid或p&#xff1a;panelGrid來構建非常簡單的表單。 對于靜態表單&#xff0c;這是正確的。 但是&#xff0c;如…

C# 定時器事件(設置時間間隔,間歇性執行某一函數,控制臺程序)

定時器事件代碼 static void Main(string[] args) {Method();#region 定時器事件 Timer aTimer new Timer();aTimer.Elapsed new ElapsedEventHandler(TimedEvent);aTimer.Interval seconds * 1000; //配置文件中配置的秒數aTimer.Enabled true;#endregionstring strLi…

總結get和post區別

參考博文&#xff1a;   淺談HTTP中Get與Post的區別 1. 數據傳遞方向&#xff1a; Get是向服務器發索取數據的一種請求&#xff0c;Post是向服務器提交數據的一種請求 &#xff08;都是請求&#xff0c;并不是一個取一個發&#xff09; Get&#xff1a;①用于獲取信息&#x…

Vmware安裝Centos NAT方式設置靜態IP

【Vmware中在搭建集群環境等&#xff0c;DHCP自動獲取IP方式不方便&#xff0c;為了固定IP減少頻繁更改配置信息&#xff0c;建議使用靜態IP來配置&#xff0c;網絡連接主要有三種方式 1.nat 2.橋接&#xff0c;3主機模式 &#xff0c;在這里主要介NAT方式&#xff0c; 為什么使…

1 TB /節點時快速,可預測且高度可用

世界正每秒從移動設備&#xff0c;Web和各種小工具向應用程序推送大量數據。 如今&#xff0c;更多的應用程序必須處理此數據。 為了保持性能&#xff0c;這些應用程序需要快速訪問數據層。 在過去的幾年中&#xff0c;RAM價格下降了&#xff0c;我們現在可以便宜得多地獲得具有…

java jni 內存_Android開發之JNI內存模型

Java 與JNI 內存管理是怎樣的想要弄清楚Java與JNI的內存管理的關系&#xff0c;首先要弄清楚JVM的內存模型JVM內存模型.png其中本地方法棧就是運行時調用native 方法的數據保存區。本地方法棧的大小可以設置成固定的或者是動態擴展。Java中的內存泄露JAVA 編程中的內存泄漏&…

04 linux用戶群組和權限

作業一&#xff1a; 1)新建用戶natasha&#xff0c;uid為1000&#xff0c;gid為555&#xff0c;備注信息為“master” 2)修改natasha用戶的家目錄為/Natasha 3)查看用戶信息配置文件的最后一行 4)為natasha用戶設置密碼“123” 5)查看用戶密碼配置文件的最后一行 6)將natasha用…

基于 CoreText 實現的高性能 UITableView

引起UITableView卡頓比較常見的原因有cell的層級過多、cell中有觸發離屏渲染的代碼&#xff08;譬如&#xff1a;cornerRadius、maskToBounds 同時使用&#xff09;、像素是否對齊、是否使用UITableView自動計算cell高度的方法等。本文將從cell層級出發&#xff0c;以一個仿朋友…

RESTEasy教程第1部分:基礎

RESTEasy是JBoss / RedHat的JAX-RS實現&#xff0c;內置于JBoss 6之后。 在這里&#xff0c;我將向您展示如何使用RESTEasy和JBossAS7.1.1.FINAL開發一個簡單的RESTful Web服務應用程序。 步驟1&#xff1a;使用Maven配置RESTEasy依賴項。 <project xmlnshttp:maven.apache.…