<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 使用數據庫 本章節將介紹如何如何創建一個從數據表?`country`?中讀取國家數據并顯示出來的頁面。為了實現這個目標,你將會配置一個數據庫連接,創建一個[活動記錄](http://www.yiichina.com/doc/guide/2.0/db-active-record)類,并且創建一個[操作](http://www.yiichina.com/doc/guide/2.0/structure-controllers)及一個[視圖](http://www.yiichina.com/doc/guide/2.0/structure-views)。 貫穿整個章節,你將會學到: * 配置一個數據庫連接 * 定義一個活動記錄類 * 使用活動記錄從數據庫中查詢數據 * 以分頁方式在視圖中顯示數據 請注意,為了掌握本章你應該具備最基本的數據庫知識和使用經驗。尤其是應該知道如何創建數據庫,如何通過數據庫終端執行 SQL 語句。 ## 準備數據庫 首先創建一個名為?`yii2basic`?的數據庫,應用將從這個數據庫中讀取數據。你可以創建 SQLite,MySQL,PostregSQL,MSSQL 或 Oracle 數據庫,Yii 內置多種數據庫支持。簡單起見,后面的內容將以 MySQL 為例做演示。 然后在數據庫中創建一個名為?`country`?的表并插入簡單的數據。可以執行下面的語句: ~~~ CREATE TABLE `country` ( `code` CHAR(2) NOT NULL PRIMARY KEY, `name` CHAR(52) NOT NULL, `population` INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `country` VALUES ('AU','Australia',18886000); INSERT INTO `country` VALUES ('BR','Brazil',170115000); INSERT INTO `country` VALUES ('CA','Canada',1147000); INSERT INTO `country` VALUES ('CN','China',1277558000); INSERT INTO `country` VALUES ('DE','Germany',82164700); INSERT INTO `country` VALUES ('FR','France',59225700); INSERT INTO `country` VALUES ('GB','United Kingdom',59623400); INSERT INTO `country` VALUES ('IN','India',1013662000); INSERT INTO `country` VALUES ('RU','Russia',146934000); INSERT INTO `country` VALUES ('US','United States',278357000); ~~~ 此時便有了一個名為?`yii2basic`?的數據庫,在這個數據庫中有一個包含三個字段的數據表?`country`,表中有十行數據。 ## 配置數據庫連接 開始之前,請確保你已經安裝了 PHP?[PDO](http://www.php.net/manual/en/book.pdo.php)?擴展和你所使用的數據庫的 PDO 驅動(例如 MySQL 的?`pdo_mysql`)。對于使用關系型數據庫來講,這是基本要求。 驅動和擴展安裝可用后,打開?`config/db.php`?修改里面的配置參數對應你的數據庫配置。該文件默認包含這些內容: ~~~ <?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ]; ~~~ `config/db/php`?是一個典型的基于文件的[配置](http://www.yiichina.com/doc/guide/2.0/concept-configurations)工具。這個文件配置了數據庫連接 yii\db\Connection 的創建和初始化參數,應用的 SQL 查詢正是基于這個數據庫。 上面配置的數據庫連接可以在應用中通過?`Yii::$app->db`?表達式訪問。 > 補充:`config/db.php`?將被包含在應用配置文件?`config/web.php`?中,后者指定了整個[應用](http://www.yiichina.com/doc/guide/2.0/structure-applications)如何初始化。請參考[配置](http://www.yiichina.com/doc/guide/2.0/concept-configurations)章節了解更多信息。 ## 創建活動記錄 創建一個繼承自[活動記錄](http://www.yiichina.com/doc/guide/2.0/db-active-record)類的類?`Country`,把它放在?`models/Country.php`?文件,去代表和讀取?`country`?表的數據。 ~~~ <?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { } ~~~ 這個?`Country`?類繼承自 yii\db\ActiveRecord。你不用在里面寫任何代碼。只需要像現在這樣,Yii 就能根據類名去猜測對應的數據表名。 > 補充:如果類名和數據表名不能直接對應,可以覆寫 yii\db\ActiveRecord::tableName() 方法去顯式指定相關表名。 使用?`Country`?類可以很容易地操作?`country`?表數據,就像這段代碼: ~~~ use app\models\Country; // 獲取 country 表的所有行并以 name 排序 $countries = Country::find()->orderBy('name')->all(); // 獲取主鍵為 “US” 的行 $country = Country::findOne('US'); // 輸出 “United States” echo $country->name; // 修改 name 為 “U.S.A.” 并在數據庫中保存更改 $country->name = 'U.S.A.'; $country->save(); ~~~ > 補充:活動記錄是面向對象、功能強大的訪問和操作數據庫數據的方式。你可以在[活動記錄](http://www.yiichina.com/doc/guide/2.0/db-active-record)章節了解更多信息。除此之外你還可以使用另一種更原生的被稱做[數據訪問對象](http://www.yiichina.com/doc/guide/2.0/db-dao)的方法操作數據庫數據。 ## 創建操作 為了向最終用戶顯示國家數據,你需要創建一個操作。相比之前小節掌握的在?`site`?控制器中創建操作,在這里為所有和國家有關的數據新建一個控制器更加合理。新控制器名為?`CountryController`,并在其中創建一個?`index`?操作,如下: ~~~ <?php namespace app\controllers; use yii\web\Controller; use yii\data\Pagination; use app\models\Country; class CountryController extends Controller { public function actionIndex() { $query = Country::find(); $pagination = new Pagination([ 'defaultPageSize' => 5, 'totalCount' => $query->count(), ]); $countries = $query->orderBy('name') ->offset($pagination->offset) ->limit($pagination->limit) ->all(); return $this->render('index', [ 'countries' => $countries, 'pagination' => $pagination, ]); } } ~~~ 把上面的代碼保存在?`controllers/CountryController.php`?文件中。 `index`?操作調用了活動記錄?`Country::find()`?方法,去生成查詢語句并從?`country`?表中取回所有數據。為了限定每個請求所返回的國家數量,查詢在 yii\data\Pagination 對象的幫助下進行分頁。?`Pagination`?對象的使命主要有兩點: * 為 SQL 查詢語句設置?`offset`?和?`limit`?從句,確保每個請求只需返回一頁數據(本例中每頁是 5 行)。 * 在視圖中顯示一個由頁碼列表組成的分頁器,這點將在后面的段落中解釋。 在代碼末尾,`index`?操作渲染一個名為?`index`?的視圖,并傳遞國家數據和分頁信息進去。 ## 創建視圖 在?`views`?目錄下先創建一個名為?`country`?的子目錄。這個目錄存儲所有由?`country`?控制器渲染的視圖。在?`views/country`?目錄下創建一個名為?`index.php`?的視圖文件,內容如下: ~~~ <?php use yii\helpers\Html; use yii\widgets\LinkPager; ?> <h1>Countries</h1> <ul> <?php foreach ($countries as $country): ?> <li> <?= Html::encode("{$country->name} ({$country->code})") ?>: <?= $country->population ?> </li> <?php endforeach; ?> </ul> <?= LinkPager::widget(['pagination' => $pagination]) ?> ~~~ 這個視圖包含兩部分用以顯示國家數據。第一部分遍歷國家數據并以無序 HTML 列表渲染出來。第二部分使用 yii\widgets\LinkPager 去渲染從操作中傳來的分頁信息。小部件?`LinkPager`?顯示一個分頁按鈕的列表。點擊任何一個按鈕都會跳轉到對應的分頁。 ## 試運行 瀏覽器訪問下面的 URL 看看能否工作: ~~~ http://hostname/index.php?r=country/index ~~~ ![](https://box.kancloud.cn/2015-10-10_561892e807fc5.png) 首先你會看到顯示著五個國家的列表頁面。在國家下面,你還會看到一個包含四個按鈕的分頁器。如果你點擊按鈕 “2”,將會跳轉到顯示另外五個國家的頁面,也就是第二頁記錄。如果觀察仔細點你還會看到瀏覽器的 URL 變成了: ~~~ http://hostname/index.php?r=country/index&page=2 ~~~ 在這個場景里,yii\data\Pagination 提供了為數據結果集分頁的所有功能: * 首先 yii\data\Pagination 把 SELECT 的子查詢?`LIMIT 5 OFFSET 0`?數據表示成第一頁。因此開頭的五條數據會被取出并顯示。 * 然后小部件 yii\widgets\LinkPager 使用 yii\data\Pagination::createUrl() 方法生成的 URL 去渲染翻頁按鈕。URL 中包含必要的參數`page`?才能查詢不同的頁面編號。 * 如果你點擊按鈕 “2”,將會發起一個路由為?`country/index`?的新請求。yii\data\Pagination 接收到 URL 中的?`page`?參數把當前的頁碼設為 2。新的數據庫請求將會以?`LIMIT 5 OFFSET 5`?查詢并顯示。 ## 總結 本章節中你學到了如何使用數據庫。你還學到了如何取出并使用 yii\data\Pagination 和 yii\widgets\LinkPager 顯示數據。 下一章中你會學到如何使用 Yii 中強大的代碼生成器?[Gii](http://www.yiichina.com/doc/guide/2.0/tool-gii),去幫助你實現一些常用的功能需求,例如增查改刪(CRUD)數據表中的數據。事實上你之前所寫的代碼全部都可以由 Gii 自動生成。
                  <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>

                              哎呀哎呀视频在线观看