yii2增删改查及AR的理解
yii2增刪改查
// 返回 id 為 1 的客戶(hù) $customer = Customer::findOne(1);
// 返回 id 為 1 且狀態(tài)為 *active* 的客戶(hù) $customer = Customer::findOne([ 'id' => 1, 'status' => Customer::STATUS_ACTIVE, ]);
// 返回id為1、2、3的一組客戶(hù) $customers = Customer::findAll([1, 2, 3]);
// 返回所有狀態(tài)為 "deleted" 的客戶(hù) $customer = Customer::findAll([ 'status' => Customer::STATUS_DELETED, ]);
// 插入新客戶(hù)的記錄 $customer = new Customer(); $customer->name = 'James'; $customer->email = 'james@example.com'; $customer->save();
// 等同于 $customer->insert();
$id = $model->attributes['id'];
Yii::$app->db->getLastInsertID()?
// 更新現(xiàn)有客戶(hù)記錄 $customer = Customer::findOne($id); $customer->email = 'james@example.com'; $customer->save();
// 等同于 $customer->update();
?
// 刪除已有客戶(hù)記錄 $customer = Customer::findOne($id); $customer->delete();
// 刪除多個(gè)年齡大于20,性別為男(Male)的客戶(hù)記錄 Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']); // 所有客戶(hù)的age(年齡)字段加1: Customer::updateAllCounters(['age' => 1]);
須知:save() 方法會(huì)調(diào)用 insert() 和 update() 中的一個(gè), 用哪個(gè)取決于當(dāng)前 AR 對(duì)象是不是新對(duì)象(在函數(shù)內(nèi)部,他會(huì)檢查 yii\db\ActiveRecord::isNewRecord 的值)。
若 AR 對(duì)象是由 new 操作符 初始化出來(lái)的,save() 方法會(huì)在表里插入一條數(shù)據(jù); 如果一個(gè) AR 是由 find() 方法獲取來(lái)的, 則 save() 會(huì)更新表里的對(duì)應(yīng)行記錄。
// 新建一條記錄 $model = new Customer; if ($model->load(Yii::$app->request->post()) && $model->save()) { // 獲取用戶(hù)輸入的數(shù)據(jù),驗(yàn)證并保存 } // 更新主鍵為$id的AR $model = Customer::findOne($id); if ($model === null) { throw new NotFoundHttpException; } if ($model->load(Yii::$app->request->post()) && $model->save()) { // 獲取用戶(hù)輸入的數(shù)據(jù),驗(yàn)證并保存 }
對(duì)AR的理解
AR的生命周期
理解AR的生命周期對(duì)于你操作數(shù)據(jù)庫(kù)非常重要。生命周期通常都會(huì)有些典型的事件存在。對(duì)于開(kāi)發(fā)AR的behaviors來(lái)說(shuō)非常有用。
當(dāng)你實(shí)例化一個(gè)新的AR對(duì)象時(shí),我們將獲得如下的生命周期:
constructor
yii\db\ActiveRecord::init(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_INIT 事件
當(dāng)你通過(guò) find() 方法查詢(xún)數(shù)據(jù)時(shí),每個(gè)AR實(shí)例都將有以下生命周期:
constructor
yii\db\ActiveRecord::init(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_INIT 事件
yii\db\ActiveRecord::afterFind(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_AFTER_FIND 事件
當(dāng)通過(guò) yii\db\ActiveRecord::save() 方法寫(xiě)入或者更新數(shù)據(jù)時(shí), 我們將獲得如下生命周期:
yii\db\ActiveRecord::beforeValidate(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件
yii\db\ActiveRecord::afterValidate(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_AFTER_VALIDATE 事件
yii\db\ActiveRecord::beforeSave(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_BEFORE_INSERT 或 yii\db\ActiveRecord::EVENT_BEFORE_UPDATE 事件
執(zhí)行實(shí)際的數(shù)據(jù)寫(xiě)入或更新
yii\db\ActiveRecord::afterSave(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_AFTER_INSERT 或 yii\db\ActiveRecord::EVENT_AFTER_UPDATE 事件
最后,當(dāng)調(diào)用 delete() 刪除數(shù)據(jù)時(shí), 我們將獲得如下生命周期:
yii\db\ActiveRecord::beforeDelete(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_BEFORE_DELETE 事件
執(zhí)行實(shí)際的數(shù)據(jù)刪除
yii\db\ActiveRecord::afterDelete(): 會(huì)觸發(fā)一個(gè) yii\db\ActiveRecord::EVENT_AFTER_DELETE 事件
轉(zhuǎn)載于:https://www.cnblogs.com/xiong63/p/6553692.html
總結(jié)
以上是生活随笔為你收集整理的yii2增删改查及AR的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 运维人员日常工作(转自老男孩)
- 下一篇: 软件设计之思想