Yii2 使用数据库

jerry Yii2 2015年11月15日 收藏

一、新建Mysql数据库test,建立表:

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

二、修改config/db.php中的数据库连接

 'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=mydatabase', // MySQL, MariaDB
            //'dsn' => 'sqlite:/path/to/database/file', // SQLite
            //'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
            //'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
            //'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
            //'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
            //'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
            //'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
            'username' => 'root', //数据库用户名
            'password' => '', //数据库密码
            'charset' => 'utf8',
        ],

三、新建models/Country.php:

<?php  
      
    namespace app\models;  
      
    use yii\db\ActiveRecord;  
      
    class Country extends ActiveRecord  
    {  
    }

新建controllers/CountryController.php:

<?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,  
            ]);  
        }  
    }

新建视图 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]) ?>

测试:http://test.com/index.php?r=country/index

查看结果并测试分页效果。