YII2 中的models和activeRecord的區別

來源:互聯網
上載者:User
如題,想弄清楚一點YII2中的model和activeRecord的具體作用和區別...由於之前用TP的,慣性覺得model用來操作資料庫進行CRUD

回複內容:

如題,想弄清楚一點YII2中的model和activeRecord的具體作用和區別...由於之前用TP的,慣性覺得model用來操作資料庫進行CRUD

一.Model:
models 是mvc中的一部分,是代表業務資料,規則和邏輯的對象.
Model 類也是更多進階模型如Active Record 活動記錄的基類
預設情況下,模型是直接從yii\base\Model繼承。
才疏學淺,我就以我實際開發中遇到的情境來解釋一下。
我舉個實際的例子吧,比如進入系統之前的第一步是登入頁面,要求使用者輸入使用者名稱,密碼。
使用者在輸入使用者名稱和密碼之後,我們會對使用者名稱和密碼進行校正。
則這時候我們需要一個LoginForm模型,它有兩個屬性:username,password。
我們看model代碼:

namespace app\models;use yii\base\Model;class LoginForm extends Model{    public $username;    public $password;    public function rules() {        // 這裡寫你的驗證規則        [['username', 'password'], 'required'],        // password is validated by validatePassword()        ['password', 'checkPassword'], // 驗證密碼    }    // 這裡寫你驗證密碼的邏輯    public function checkPassword($attribute,$params)     {        // ......    }    // 這裡寫登入的邏輯    public function login()    {        // ......    }}

我們看controller代碼:

namespace app\controllers;use Yii;use yii\web\Controller;class SiteController extends Controller{    // ...    public function actionLogin()    {        $model = new LoginForm();        // 根據使用者在登入表單的輸入來做判斷        if ($model->load(Yii::$app->request->post()) && $model->login()) {            return $this->goBack();        }    }}

二.AR類
來看看yii手冊上的文字描述:
Active Record (活動記錄,以下簡稱AR)提供了一個物件導向的介面, 用以訪問資料庫中的資料。一個 AR 類關聯一張資料表, 每個 AR 對象對應表中的一行,對象的屬性(即 AR 的特性Attribute)映射到資料行的對應列。 一條活動記錄(AR對象)對應資料表的一行,AR對象的屬性則映射該行的相應列

AR類究竟跟model有什麼關係?我們從代碼上看:
開啟 yii\db\ActiveRecord.php:

class ActiveRecord extends BaseActiveRecord{}

我們發現ActiveRecord繼承BaseActiveRecord,再開啟yii\db\BaseActiveRecord.php:

abstract class BaseActiveRecord extends Model implements ActiveRecordInterface{}

可以看出繼承了Model類.

追蹤一下原始碼吧,會發現它們之間的關係的

ActiveRecord 繼承自 Model 提供資料操作。

ActiveRecord資料庫的對象映射的一種方法,是把資料庫表映射到程式中對象的一種設計思路。
Model則是資料模型操作的概括。

ActiveRecord可以理解為操作資料庫的一種手段(當然還有其他的手段,比如直接的SQL查詢等等)。而Model應該理解為我們需要進行那些操作,就把這些操作寫在Model裡。

大多數架構喜歡將這兩個東西融合在一個對象中,所以理解起來會有一些混淆。其實ActiveRecord更多使用的是對象的屬性參數(因為要對資料庫映射來的資料進行儲存),而Model更多的提現在對象的方法上(操作方法也就是具體如何操作資料的流程)。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.