溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

yii2中dao和ar的區(qū)別是什么

發(fā)布時間:2021-01-07 10:51:30 來源:億速云 閱讀:495 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(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é)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(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)容。

AI