<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 模型實例化 [上一頁](# "上一頁")[下一頁](# "下一頁") 在ThinkPHP中,可以無需進行任何模型定義。只有在需要封裝單獨的業務邏輯的時候,模型類才是必須被定義的,因此ThinkPHP在模型上有很多的靈活和方便性,讓你無需因為表太多而煩惱。 根據不同的模型定義,我們有幾種實例化模型的方法,根據需要采用不同的方式: ### 直接實例化 可以和實例化其他類庫一樣實例化模型類,例如: ~~~ $User = new \Home\Model\UserModel(); $Info = new \Admin\Model\InfoModel(); // 帶參數實例化 $New = new \Home\Model\NewModel('blog','think_',$connection); ~~~ 模型類通常都是繼承系統的\Think\Model類,該類的架構方法有三個參數,分別是: ##### Model(['模型名'],['數據表前綴'],['數據庫連接信息']); 三個參數都是可選的,大多數情況下,我們根本無需傳入任何參數即可實例化。 | 參數 | 描述 | |-----|-----| | 模型名 | 模型的名稱 和數據表前綴一起配合用于自動識別數據表名稱 | | 數據表前綴 | 當前數據表前綴 和模型名一起配合用于自動識別數據表名稱 | | 數據庫連接信息 | 當前數據表的數據庫連接信息 如果沒有則獲取配置文件中的 | > 如果當前數據表沒有前綴,則傳入空字符串即可 數據庫連接信息參數支持三種格式: ##### 1、字符串定義 字符串定義采用DSN格式定義,格式定義規范為: ~~~ type://username:passwd@hostname:port/DbName // 3.2.1以上版本還可以支持字符集設定 type://username:passwd@hostname:port/DbName#charset ~~~ 例如: ~~~ new \Home\Model\NewModel('blog','think_','mysql://root:1234@localhost/demo'); ~~~ ##### 2、數組定義 可以傳入數組格式的數據庫連接信息,例如: ~~~ $connection = array( 'db_type' => 'mysql', 'db_host' => '127.0.0.1', 'db_user' => 'root', 'db_pwd' => '12345', 'db_port' => 3306, 'db_name' => 'demo', ); new \Home\Model\NewModel('new','think_',$connection); ~~~ 3.2.1以上版本還可以支持數據編碼設定,例如: ~~~ $connection = array( 'db_type' => 'mysql', 'db_host' => '127.0.0.1', 'db_user' => 'root', 'db_pwd' => '12345', 'db_port' => 3306, 'db_name' => 'demo', 'db_charset' => 'utf8', ); new \Home\Model\NewModel('new','think_',$connection); ~~~ ##### 3、配置定義 我們可以事先在配置文件中定義好數據庫連接信息,然后在實例化的時候直接傳入配置的名稱即可,例如: ~~~ //數據庫配置1 'DB_CONFIG1' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp' ), //數據庫配置2 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp', ~~~ 在配置文件中定義數據庫連接信息的時候也支持字符串和數組格式,格式和上面實例化傳入的參數一樣。 然后,我們就可以這樣實例化模型類傳入連接信息: ~~~ new \Home\Model\NewModel('new','think_','DB_CONFIG1'); new \Home\Model\BlogModel('blog','think_','DB_CONFIG2'); ~~~ 事實上,當我們實例化的時候沒有傳入任何的數據庫連接信息的時候,系統其實默認會獲取配置文件中的相關配置參數,包括: ~~~ 'DB_TYPE' => '', // 數據庫類型 'DB_HOST' => '', // 服務器地址 'DB_NAME' => '', // 數據庫名 'DB_USER' => '', // 用戶名 'DB_PWD' => '', // 密碼 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 數據庫表前綴 'DB_DSN' => '', // 數據庫連接DSN 用于PDO方式 'DB_CHARSET' => 'utf8', // 數據庫的編碼 默認為utf8 ~~~ 如果應用配置文件中有配置上述數據庫連接信息的話,實例化模型將會變得非常簡單。 ### D方法實例化 上面實例化的時候我們需要傳入完整的類名,系統提供了一個快捷方法D用于數據模型的實例化操作。 要實例化自定義模型類,可以使用下面的方式: ~~~ <?php //實例化模型 $User = D('User'); // 相當于 $User = new \Home\Model\UserModel(); // 執行具體的數據操作 $User->select(); ~~~ > 當 `\Home\Model\UserModel` 類不存在的時候,D函數會嘗試實例化公共模塊下面的 `\Common\Model\UserModel` 類。 D方法的參數就是模型的名稱,并且和模型類的大小寫定義是一致的,例如: | 參數 | 實例化的模型文件(假設當前模塊為Home) | |-----|-----| | User | 對應的模型類文件的 \Home\Model\UserModel.class.php | | UserType | 對應的模型類文件的 \Home\Model\UserTypeModel.class.php | > 如果在Linux環境下面,一定要注意D方法實例化的時候的模型名稱的大小寫。 D方法可以自動檢測模型類,如果存在自定義的模型類,則實例化自定義模型類,如果不存在,則會實例化系統的\Think\Model基類,同時對于已實例化過的模型,不會重復去實例化。 ~~~ D方法還可以支持跨模塊調用,需要使用: //實例化Admin模塊的User模型 D('Admin/User'); //實例化Extend擴展命名空間下的Info模型 D('Extend://Editor/Info'); ~~~ > 注意:跨模塊實例化模型類的時候 不支持自動加載公共模塊的模型類。 ### M方法實例化模型 D方法實例化模型類的時候通常是實例化某個具體的模型類,如果你僅僅是對數據表進行基本的CURD操作的話,使用M方法實例化的話,由于不需要加載具體的模型類,所以性能會更高。 例如: ~~~ // 使用M方法實例化 $User = M('User'); // 和用法 $User = new \Think\Model('User'); 等效 // 執行其他的數據操作 $User->select(); ~~~ M方法也可以支持跨庫操作,例如: ~~~ // 使用M方法實例化 操作db_name數據庫的ot_user表 $User = M('db_name.User','ot_'); // 執行其他的數據操作 $User->select(); ~~~ M方法的參數和\Think\Model類的參數是一樣的,也就是說,我們也可以這樣實例化: ~~~ $New = M('new','think_',$connection); // 等效于 $New = new \Think\Model('new','think_',$connection); ~~~ 具體的參數含義可以參考前面的介紹。 M方法實例化的時候,默認情況下是直接實例化系統的\Think\Model類,如果我們希望實例化其他的公共模型類的話,可以使用如下方法: ~~~ $User = M('\Home\Model\CommonModel:User','think_','db_config'); // 相當于 $User = new \Home\Model\CommonModel('User','think_','db_config'); ~~~ > 如果你的模型類有自己的業務邏輯,M方法是無法支持的,就算是你已經定義了具體的模型類,M方法實例化的時候是會直接忽略。 ### 實例化空模型類 如果你僅僅是使用原生SQL查詢的話,不需要使用額外的模型類,實例化一個空模型類即可進行操作了,例如: ~~~ //實例化空模型 $Model = new Model(); //或者使用M快捷方法是等效的 $Model = M(); //進行原生的SQL查詢 $Model->query('SELECT * FROM think_user WHERE status = 1'); ~~~ > 實例化空模型類后還可以用table方法切換到具體的數據表進行操作 我們在實例化的過程中,經常使用D方法和M方法,這兩個方法的區別在于M方法實例化模型無需用戶為每個數據表定義模型類,如果D方法沒有找到定義的模型類,則會自動調用M方法。 [上一頁](# "上一頁")[下一頁](# "下一頁")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看