您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)yii2中dao和ar的區(qū)別是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Active Record(AR)是一個流行的對象-關(guān)系映射(ORM)技術(shù)。每個AR 類代表一個數(shù)據(jù)表(或視圖),數(shù)據(jù)表(或視圖)的列在AR 類中體現(xiàn)為類的屬性,一個AR 實(shí)例則表示表中的一行。常見的CRUD 操作作為AR 的方法實(shí)現(xiàn)。
因此,我們可以以一種更加面向?qū)ο蟮姆绞皆L問數(shù)據(jù)。$c = new CDbCriteria();是ActiveRecord的一種寫法,使ActiveRecord更加靈活,而拼裝sql則是最常見不過,下面看兩個例子。
注意:AR 并非要解決所有數(shù)據(jù)庫相關(guān)的任務(wù)。它的最佳應(yīng)用是模型化數(shù)據(jù)表為PHP 結(jié)構(gòu)和執(zhí)行不包含復(fù)雜SQL 語句的查詢。對于復(fù)雜查詢的場景,應(yīng)使用Yii DAO。
$criteria = new CDbCriteria; //函數(shù)方式 $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', '分類');//搜索條件,其實(shí)代表了。。where name like '%分類%' $criteria->addBetweenCondition('id', 1, 4);//between 1 and 4 $criteria->compare('id', 1); //這個方法比較特殊,他會根據(jù)你的參數(shù)自動處理成addCondition或者addInCondition, //即如果第二個參數(shù)是數(shù)組就會調(diào)用addInCondition $criteria->addCondition("id = :id"); $criteria->params[':id']=1; //屬性方式 $criteria->select = 'id,parentid,name'; //代表了要查詢的字段,默認(rèn)select='*'; $criteria->join = 'xxx'; //連接表 $criteria->with = 'xxx'; //調(diào)用relations $criteria->limit = 10; //取1條數(shù)據(jù),如果小于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數(shù)據(jù)訪問對象(DAO)建立在PHP的數(shù)據(jù)對象(PDO)擴(kuò)展上,使得在一個單一的統(tǒng)一的接口可以訪問不同的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。使用Yii的DAO開發(fā)的應(yīng)用程序可以很容易地切換使用不同的數(shù)據(jù)庫管理系統(tǒng),而不需要修改數(shù)據(jù)訪問代碼。下面是DAO的例子:
示例代碼
/** * 關(guān)于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(); }
有幾點(diǎn)注意的地方:
1,與DAO方式結(jié)果區(qū)別是:DAO方式 數(shù)組中的每一個元素仍是數(shù)組。而通過CDbCriteria方式,數(shù)組中的元素是對象。
2,即使該功能很強(qiáng)大,仍有一些需求不能滿足,此時仍需sql語句。比如select avg(num) amount from ****。
3,打印運(yùn)行后的結(jié)果,可更深入yii這么做是如何實(shí)現(xiàn)的
感謝各位的閱讀!關(guān)于“yii2中dao和ar的區(qū)別是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。