4.1、4.2Yii如何使用數據庫
1.Yii如何使用數據庫
Yii通過 數據庫訪問對象 來使用數據庫。
意思就是我們把連接的數據庫映射爲一個對象,這樣做就把對數據庫的操作變成了對對象的操作。
2.數據庫的連接
- 當我們配置好數據庫連接文件之後,會自動創建一個yii\db\Connection對象,我們可以通過這個對象訪問數據庫。
使用這個數據庫連接對象的寫法:Yii::$app->db
圖片截取自:魏曦教你學Yii2.0優酷視頻.
3.數據庫的查詢
(注:方法一是以整個數據庫爲對象來操作,而方法二是以一張表對應一個AR類來操作的,AR類是yii框架的靈魂,方法一併不 常用。)
方法一:
使用 createCommand("SQL查詢語句") 方法來查詢數據庫。
-
<?php $a=Yii::$app->db->createCommand("select * from post")->queryAll(); echo "<pre>"; var_dump($a); //post是我的數據庫中已經建好的一張表 //Yii::db->createCommand()返回一個對象,該對象調用queryAll()方法,結果返回一個數組 ?>
結果:
不過這種方法來訪問數據庫其實並不是很常用,原因如下:
1.不同數據庫系統的SQL語句會有些差別,因此無法做到代碼使用於多種數據庫。
想象一下當你的代碼遷移的時候,大工程面對的修改量是令人發怵的。
2.用數組,而不是面對對象的方式管理數據,代碼難爲難維護。
3.如果不小心,會留下SQL注入這種不安全因素。
圖片截取自:魏曦教你學Yii2.0優酷視頻.
方法二:
通過ActiveRecord(活動記錄類)來訪問數據庫。
- 一個AR類關聯數據庫的一張表,每個AR類對象對應表中的一行。
- AR對象的屬性,對應爲數據庫的列。
- 可以直接以面向對象的方式來操縱數據表中的數據,這樣就不需要寫SQL語句就能實現數據庫的訪問。
思路圖:
數據查詢:
AR提供了兩種靜態方法來構建DB查詢,返回AR對象。
- yii\db\ActiveRecord::find()
<?php
$modl=Post::find()->where(['id'=>10])->one();
var_dump($model);
exit(0);
//Post是根據數據庫中的表post建立的AR類
//one()方法執行查詢,不是返會一個AR對象(一行)
//all()方法執行查詢,返回的是一個AR對象數組(多行)
?>
結果:可以看到返回的是Post類的對象,一個對象對應表中的一行。
- find()公共靜態方法創建了yii\ActiveQueryInterface實例,該實例去幫我們進行查詢。
圖片截取自:魏曦教你學Yii2.0優酷視頻.
靜態方法find()有兩種快捷方式:
$model=Post::findOne(1); //查詢主關鍵字爲1的這條記錄
$model=Post::findAll(['status'=>1,]); //參數爲查詢條件,可以返回多個對象
- yii\db\ActiveRecord::findBySql()
$sql="select * from post where status=1";
$posts=Post::findBySql($sql)->all();
//和createCommand()方法類似,都用到SQL語句
//但是返回的是AR對象,不再是字符型數組