YII2框架中操作資料庫的方式例項分析
阿新 • • 發佈:2020-03-13
本文例項講述了YII2框架中操作資料庫的方式。分享給大家供大家參考,具體如下:
一、以createCommand方式:
// YII2中通過createCommand來處理資料庫 // 查詢多條記錄 // {{%user}} 表示如果設定了表字首,YII會自動幫你替換 $data1 = YII::$app->db->createCommand('select * from {{%user}}')->queryAll(); // 查詢一條記錄 // createCommand的第二個引數可以進行引數繫結 $data2 = YII::$app->db->createCommand('select * from {{%user}} where id=:id',['id' => 2])->queryOne(); // 返回一列(第一列)資料 $data3 = YII::$app->db->createCommand('select name from {{%user}}')->queryColumn(); // 返回一個標量值,常用於統計 $data4 = YII::$app->db->createCommand('select count(*) as cnt from {{%user}}')->queryScalar(); // 繫結引數,防止SQL注入問題 // bindValue繫結一個引數 $data5 = YII::$app->db->createCommand('select * from {{%user}} where id=:id') ->bindValue(':id',3) ->queryOne(); // 繫結多個引數 $data6 = YII::$app->db->createCommand('select * from {{%user}} where id=:id and name=:name') ->bindValues([':id' => 5,':name' => 'eee']) ->queryOne(); // 繫結引數引用 $id = 7; $data7 = YII::$app->db->createCommand('select * from {{%user}} where id=:id') ->bindParam(':id',$id) ->queryOne(); // 執行非查詢語句 $data8 = YII::$app->db->createCommand('update {{%user}} set name=:name where id=:id') ->bindValues([':name' => 'abcdef',':id' => 8]) ->execute(); // 當然,我們也可以用更加簡便的方法 // insert()插入 $data9 = YII::$app->db->createCommand()->insert('{{%user}}',[ 'name' => 'test','sex' => 1,'age' => 28,])->execute(); // batchInsert()批量插入 $data10 = YII::$app->db->createCommand()->batchInsert('{{%user}}',['name','sex','age'],[ ['111',1,11],['222',22],])->execute(); // update()更新 $data11 = YII::$app->db->createCommand()->update('{{%user}}',[ 'name' => '1242143214' ],'id=:id',['id' => 10])->execute(); // delete()刪除 $data12 = YII::$app->db->createCommand()->delete('{{%user}}',['id' => 11])->execute(); // 執行事務 $trans = YII::$app->db->beginTransaction(); try { YII::$app->db->createCommand()->update('{{%user}}',['age' => 12],['id' => 13])->execute(); YII::$app->db->createCommand()->update('{{%user}}',['age' => 22],['id' => 14])->execute(); $trans->commit(); } catch (\Exception $e) { //如果語句中有一個執行失敗,那麼就將回滾 $trans->rollBack(); throw $e; } // 獲取表的定義資訊 $info = YII::$app->db->getTableSchema('{{%user}}');
二、以AR(Active Record)方式操作資料庫
我們需要建立一個繼承自\yii\db\ActiveRecord的模型,然後重寫tableName()函式,返回要操作的表名。
<?php namespace app\models; use yii\db\ActiveRecord; class MyUser extends ActiveRecord { public static function tableName() { return '{{%user}}'; } }
常用操作如下:
// 查詢一條記錄 // asArray的作用是以陣列形式返回結果 // find()會返回一個ActiveQuery物件,ActiveQuery物件繼承自yii\db\Query,所以可以使用Query中的所有查詢方法 $data1 = MyUser::find()->where(['id' => 1])->asArray()->one(); // 查詢多條記錄 $data2 = MyUser::find()->where([])->orderBy('id desc')->asArray()->all(); // 根據主鍵獲取一條記錄 $data3 = MyUser::findOne(3); // 根據主鍵獲取多條記錄 $data4 = MyUser::findAll([4,5,6,7]); // 帶條件查詢多條記錄 $data5 = MyUser::findAll(['sex' => 1]); // 執行原生SQL $data6 = MyUser::findBySql('select * from {{%user}} where id=:id',[':id' => 8])->asArray()->one(); // 新增資料 // 準備一個新的例項,然後設定對應欄位屬性,儲存 $user = new MyUser(); $user->name = 'test'; $user->sex = 1; $user->age = 22; $user->save(); // 修改資料 // 先獲取一個物件,然後設定對應欄位屬性,儲存 $upd = MyUser::findOne(10); $upd->name = 'abcdefg'; $upd->save(); // 修改多條資料 $data7 = MyUser::updateAll(['name' => 'update'],['sex' => 1]); // 刪除一條資料 $del = MyUser::findOne(15); $del->delete(); // 刪除多條資料 $data8 = MyUser::deleteAll(['sex' => 0]); // 事務操作 $user2 = MyUser::findOne(22); $user3 = MyUser::findOne(33); $trans = MyUser::getDb()->beginTransaction(); try { $user2->name = '2222'; $user3->name = '3333'; //修改資料 $user2->save(); $user3->save(); $trans->commit(); } catch (\Exception $e) { $trans->rollBack(); throw $e; }
具體更多的操作方式建議檢視官方文件。
更多關於Yii相關內容感興趣的讀者可檢視本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向物件程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家基於Yii框架的PHP程式設計有所幫助。