yii2中dao和ar區別

active record(ar)是一個流行的對象-關系映射(orm)技術。每個ar 類代表一個數據表(或視圖),數據表(或視圖)的列在ar 類中體現為類的屬性,一個ar 實例則表示表中的一行。常見的crud 操作作為ar 的方法實現。

yii2中dao和ar區別

因此,我們可以以一種更加面向對象的方式訪問數據。$c = new CDbCriteria();是ActiveRecord的一種寫法,使ActiveRecord更加靈活,而拼裝sql則是最常見不過,下面看兩個例子。 ? ? (推薦學習:yii教程

注意:AR 并非要解決所有數據庫相關的任務。它的最佳應用是模型化數據表為PHP 結構和執行不包含復雜SQL 語句的查詢。對于復雜查詢的場景,應使用Yii DAO。?

$criteria?=?new?CDbCriteria;??????? //函數方式? $criteria->addCondition("id=1");?//查詢條件,即where?id?=?1??? $criteria->addInCondition('id',?array(1,2,3,4,5));?//代表where?id?IN?(1,23,,4,5,);??? $criteria->addNotInCondition('id',?array(1,2,3,4,5));//與上面正好相法,是NOT?IN??? $criteria->addCondition('id=1','OR');//這是OR條件,多個條件的時候,該條件是OR而非AND??? $criteria->addSearchCondition('name',?'分類');//搜索條件,其實代表了。。where?name?like?'%分類%'??? $criteria->addBetweenCondition('id',?1,?4);//between?1?and?4???? ????? $criteria->compare('id',?1);????//這個方法比較特殊,他會根據你的參數自動處理成addCondition或者addInCondition,??? ????????????????????????????????//即如果第二個參數是數組就會調用addInCondition??? $criteria->addCondition("id?=?:id");??? $criteria->params[':id']=1;??? ?????? //屬性方式??? $criteria->select?=?'id,parentid,name';?//代表了要查詢的字段,默認select='*';??? $criteria->join?=?'xxx';?//連接表??? $criteria->with?=?'xxx';?//調用relations???? $criteria->limit?=?10;????//取1條數據,如果小于0,則不作處理??? $criteria->offset?=?1;???//兩條合并起來,則表示?limit?10?offset?1,或者代表了。limit?1,10??? $criteria->order?=?'xxx?DESC,XXX?ASC'?;//排序條件??? $criteria->group?=?'group?條件';??? $criteria->having?=?'having?條件?';??? $criteria->distinct?=?FALSE;?//是否唯一查詢

Yii數據訪問對象(DAO)建立在PHP的數據對象(PDO)擴展上,使得在一個單一的統一的接口可以訪問不同的數據庫管理系統(DBMS)。使用Yii的DAO開發的應用程序可以很容易地切換使用不同的數據庫管理系統,而不需要修改數據訪問代碼。下面是DAO的例子:

示例代碼

/** ?????*?關于DAO的例子 ?????*?獲取所有用戶名 ?????*/ ????public?function?getUsernames?() ????{ ????????$sqlStatement?=?'?SELECT?`username`?FROM?`testdrive`.`tbl_user`?'; ????????$this->command?=?$this->connection->createCommand($sqlStatement); ????????return?$this->command->queryAll(); ????} ????/** ?????* ?????*?添加一個用戶 ?????*/ ????public?function?addUser?() ????{ ????????$sqlStatement?=?"?INSERT?INTO?`tbl_user`?(`username`,?`password`,?`email`)?VALUES?('test',?'test',?'test@test.com')?"; ????????$this->command?=?$this->connection->createCommand($sqlStatement); ????????return?$this->command->execute(); ????}

有幾點注意的地方:

1,與DAO方式結果區別是:DAO方式 數組中的每一個元素仍是數組。而通過CDbCriteria方式,數組中的元素是對象。

2,即使該功能很強大,仍有一些需求不能滿足,此時仍需sql語句。比如select avg(num) amount from ****。

3,打印運行后的結果,可更深入yii這么做是如何實現的

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享