1. 程式人生 > 程式設計 >YII2框架中操作資料庫的方式例項分析

YII2框架中操作資料庫的方式例項分析

本文例項講述了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程式設計有所幫助。