Yii2的ActiveRecord與ActiveQuery簡單介紹

活動記錄

        活動記錄爲與數據庫中某張表中的某條記錄相關聯的對象,咱們經過調用此對象的 CURD方法對記錄進行操做,Yii2的活動記錄其實很標準,AR 類爲模型Model,對應數據表,AR 類的實例爲活動記錄,對應表中某條記錄。php

        在 Yii2 中活動記錄爲 AR 的實例,對應數據表中的某條記錄web

        AR 的實例自己做爲一條數據表中的記錄不該該承擔對錶級別的操做,因此 Yii2 將此任務賦予了 AR 及其子類(咱們本身寫model)。咱們能夠調用相關的 類方法(即靜態方法)對錶進行檢索從而獲取咱們想要的活動記錄,固然,這些靜態方法也能夠被此模型的實例所使用(靜態方法的特性)sql

ActiveRecord 的 ORM 操做標準:數據庫

    一、經過 AR 類訪問數據庫,檢索其所對應的數據表得到符合條件的活動記錄數組

    二、對活動記錄進行CURD操做app

Yii2 的 AR 是經過調用 AQ 對其所關聯的表進行檢索操做,如下 AR 方法會返回 AQ 對象yii

User::find() //生成與當前AR所關聯的表的AQ對象
User::findBySql($sql) //根據語句生成相對應AQ對象  $sql = "select * from yii_user where id = 1"

當進行關聯查詢的時候則是經過已經肯定的活動記錄對關聯表進行條件檢索ui

//關聯查詢時生成AQ $user->hasOne(Order::className(), ['uid' => 'id']) 將訂單表與用戶關聯
$user->hasMany()
//關聯查詢時生成AQ $user->hasOne(Order::className(), ['uid' => 'id']) 將訂單表與用戶關聯
$user->hasOne()

AQ則能夠經過調用一下方法對數據表進行檢索this

AQ->where()->groupBy()->having()->orderBy()->offset()->limit()->all()/One();

在最後經過 all 或 one 方法返回符合條件的活動記錄(模型的實例),固然也可使 asArray() 返回數組集合spa

<?php
namespace app\models;

use yii\db\ActiveRecord;

class User extends ActiveRecord {
    
    public static function tableName() {
        //若是db配置中開啓了 tablePrefix => 'tabPre' 的參數設置 這裏能夠自動返回表全稱
        retrun "{{%_tabName}}";
    }
    
    public function getUserOrders() {
        return $this->hasMany(Cart::className(), ['uid' => 'id'])->asArray()->all();
    }
}
?>

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\User;

class IndexController extends Controller {
    
    public function actionOrders($id) {
        $user = User::findOne($id); //經過 AR 類對 yii_user 表進行檢索返回符合條件的活動記錄
        // $user = (new User())->findOne($id); //這樣也能夠 不過很彆扭 一條空活動記錄去檢索整個表 越權了
        $orders = $user->getUserOrders(); //活動記錄調用關聯查詢獲取訂單
    }
}
?>

此外 Yii 還能夠經過如下方法獲取活動記錄

User::findOne(['id' => 1]);
User::findAll(['status' => 1]);

TP 的 AR 並非很標準,TP 本身再 AR 章節也說了,TP 的 AR 類型以下

Database -> ModelObj-> ModelObj->find() -> AR -> AR CURD

恩,嚴格來講 TP 並無 ActiveRecord類,全部的對錶操做都是基於 Model 類型的,Model 的實例在使用 find()方法後就成爲一條 AR 對象.....並且這貨仍是個多功能的AR對象....

$user = new Home\Model\User(); // D('user')..這裏得到一條 Model 的實例.... 
$user->find(1); // 而後這個Model實例就成爲了 AR 不要忘了find平時的用法 這裏也會返回表記錄的數組 
$userInfo = $user->find(1); // 並且這貨還能夠這樣用 直接就給你數組了....
$user->username = "sallency";
$user->save();

看的可能有些暈吧,記住就好......

相關文章
相關標籤/搜索