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