摘要:寫在最后這些就是我在學(xué)習(xí)中總結(jié)的一些有關(guān)的改進(jìn),不得不說,的這些改進(jìn)使得我們的開發(fā)更友好,更優(yōu)雅了,僅是,就可以讓人用的很爽,所以,上手吧原文來自
這篇文章我們來看看在 Yii2 之中的 Active Record,為啥要將 Active Record 多帶帶出來說呢?因為個人認(rèn)為這是 Yii(不管是 Yii1.1 還是 Yii2)最強(qiáng)大的一部分功能之一,何況又遇上在 Yii2 中其實(shí)對 Active Record的改進(jìn)還是比較多的,所以我們就通過這篇文章來瞅瞅 Yii2 的 Active Record 新特性。
1.支持更多的數(shù)據(jù)庫Yii2的Active Record首先值得稱道的一點(diǎn)就是它已經(jīng)可以支持更多的數(shù)據(jù)庫,包括一些NoSQL類型的數(shù)據(jù)庫如MongoDB,還有一些流行的存儲后端如: elasticsearch, redis, Sphinx search也得到很好的支持,現(xiàn)在真是隨意你怎么玩數(shù)據(jù)了。因為我們在想換一個存儲后端的時候可以輕松地在配置文件里切換過來,完全不用去修改Active Record的代碼,酷斃!
2.在Yii2中使用Active Record查詢數(shù)據(jù)在Yii2中使用Active Record的時候,第一個最直觀的感受可能就是model()調(diào)用已經(jīng)跟Yii1.1變得不同了,可以說所有的查詢函數(shù)都源自 find() 或 findBySql()這兩個函數(shù),所以像在Yii1.1中的Post::model()->findAll()等函數(shù)就沒有了。這里對Active Record的查詢模塊介紹都是很簡單的,當(dāng)然也可能包含一些個人的主觀因素在里面,不說廢話,如果你能看看下面這些來自官方文檔中Active Record介紹的代碼片段你就會變得很清晰。
where(["status" => Customer::STATUS_ACTIVE]) ->orderBy("id") ->all(); // 查找出id為1的customer(注意時一個): $customer = Customer::find() ->where(["id" => 1]) ->one(); // 返回 *active* customers的數(shù)量: $count = Customer::find() ->where(["status" => Customer::STATUS_ACTIVE]) ->count(); // 找到所有將id作為索引的customer: $customers = Customer::find()->indexBy("id")->all(); // $customers array is indexed by customer IDs // 用查詢語句查找所有的customer: $sql = "SELECT * FROM customer"; $customers = Customer::findBySql($sql)->all();
還有一個值得注意的地方是,在Yii1.1中使用的findByPk()和find()在Yii2中有了新的替代者,
1, "status" => Customer::STATUS_ACTIVE, ]); // 查找出id為1,或2,或3的所有customer: $customers = Customer::findAll([1, 2, 3]); // 找到狀態(tài)為 "deleted" 的customer: $customer = Customer::findAll([ "status" => Customer::STATUS_DELETED, ]);3.關(guān)聯(lián)(Relations)
在Yii2中,不再存在relations()函數(shù),而是使用getters的方式返回一個ActiveQuery對象
class Post extends yii/db/ActiveRecord{ public function getComments() { return $this->hasMany("Comment", array("post_id" => "id")); } }
但是關(guān)聯(lián)性還是可以使用類似$game->players,不過在Yii2你可以根據(jù)自己的情況來自定義你的查詢環(huán)境(查詢語句),比如:
$comments = $post->getComments()->andWhere("approve=1")->all();高級特性:
但目前為止如果你覺Active Record還是沒法說服覺得它很強(qiáng)大,那么你可以好好看看這里。我會在這里羅列一些在Yii2中Active Record的(我覺得還不錯的)細(xì)微的小改進(jìn),不過也是很貼心,因為在開發(fā)過程中,你可能更喜歡將查詢到的數(shù)據(jù)存到一個數(shù)組里,這樣不僅會方便我們在Views中的輸出,也在一定程度上節(jié)約了內(nèi)存,于是,我在這里推薦你調(diào)用asArray()這個函數(shù)
$posts = Post::find()->asArray()->all();
說到內(nèi)存,上面的函數(shù)還是不能滿足你的需求?全部查出來還是太大了?你想限制一下內(nèi)存?OK,在Yii2中,你可以使用batch()函數(shù)來限制你的查詢請求;PS:batch就是批量的意思
// 一次查詢10個 foreach (Post::find()->batch(10) as $posts) { // $posts 是一個包含10個(有可能更少)Post對象的數(shù)組 } // 查詢10個的同時一個一個輸出 foreach (Post::find()->each(10) as $post) { // $post 是一個Post對象 } // 跟with一起使用 foreach (Post::find()->with("comments")->each() as $post) { }
另外,Yii2中已經(jīng)自動支持?jǐn)?shù)據(jù)庫中的事務(wù)管理(transactions),所以你完全不用擔(dān)心在使用數(shù)據(jù)查詢,更新的時候是否開啟了事務(wù)管理,Yii2已經(jīng)幫你做好了這一切。
寫在最后:這些就是我在學(xué)習(xí)Yii2中總結(jié)的一些有關(guān)Active Record的改進(jìn),不得不說,Yii2的這些改進(jìn)使得我們的開發(fā)更友好,更優(yōu)雅了,僅是Active Record,就可以讓人用的很爽,所以,上手Yii2吧
原文來自:http://www.jellybool.com/post/yii2-active-record
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/20901.html
摘要:而且現(xiàn)在的中,每個輸出變?yōu)榱朔祷兀拖裆厦娴囊粯?,你現(xiàn)在可以完全返回一個字符串了,有沒有一絲絲的影子不過,你在的中只需認(rèn)識這些新特性基本就足矣,因為一些更基本的東西跟是一樣的撒,完全不用怕,我是說如果你上手過的話。 這篇文章主要來看看在Yii2之中的MVC,當(dāng)然,最核心的思想還是跟Yii1.1一樣的,但是我今天是想來看看在Yii2里的MVC跟Yii1.1有什么不同,或者應(yīng)該直接說,Yi...
摘要:建立關(guān)聯(lián)關(guān)系后,通過可以獲取一個對象的數(shù)組,該數(shù)組代表當(dāng)前客戶對象的訂單集。定義關(guān)聯(lián)關(guān)系使用一個可以返回對象的方法,對象有關(guān)聯(lián)上下文的相關(guān)信息,因此可以只查詢關(guān)聯(lián)數(shù)據(jù)?;诒硗怄I定義關(guān)聯(lián)關(guān)系是最佳方法。 簡介 Yii 在操作數(shù)據(jù)庫方面提供了一個十分強(qiáng)大的類庫來支撐整個框架業(yè)務(wù)的運(yùn)轉(zhuǎn),這就是 Active Record (活動記錄,以下簡稱AR)。 基本概念 AR類提供了一個面向?qū)ο蟮慕?..
摘要:運(yùn)行來安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運(yùn)行安裝一個擴(kuò)展時,文件會被自動更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達(dá)到這個目的,你應(yīng)當(dāng)在公開發(fā)布前做測試。 簡述 擴(kuò)展是專門設(shè)計的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個頁面底部添加...
摘要:首先你應(yīng)該是在用以上的版本,如果版本在這之下,是時候該升級了。按照其官網(wǎng)的說法,這個組織的目的并不是告訴你你應(yīng)該怎么做,只是一些主流的框架之間相互協(xié)商和約定。和沒有出現(xiàn)在以上的列表中,是因為還沒有投票通過。不要被這些話所困擾。 首先你應(yīng)該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。我建議如果有條件,最好使用最新的版本。 你應(yīng)該看過 PHP The R...
摘要:關(guān)于作者程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事和前端開發(fā),使用和,端使用混合式開發(fā)。合適和夠用是最完美的追求。沒錯,是一款的后端框架。的靈感來自一個名為的框架。功能亮點(diǎn)是圍繞實(shí)際用例構(gòu)建的。讓您忘掉傳統(tǒng)查詢,擁抱優(yōu)雅的數(shù)據(jù)模型。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合...
閱讀 2880·2021-11-11 10:58
閱讀 1934·2021-10-11 10:59
閱讀 3501·2019-08-29 16:23
閱讀 2349·2019-08-29 11:11
閱讀 2797·2019-08-28 17:59
閱讀 3848·2019-08-27 10:56
閱讀 2093·2019-08-23 18:37
閱讀 3123·2019-08-23 16:53