Làm việc với database trong yii2

0
715

Làm việc với database là 1 vấn đề cơ bản đối với lập trình web .Các các hệ thống database đa dạng mongodb,sql,mysql,oracel chúng ta sẽ dễ dàng liên kết với yii2 với việc config 1 cách đơn giản và hiệu quả .Mình thường làm việc với mysql nên hôm nay mình xin sẽ viết về việc liên kết dưới dạng mysql server

Bạn phải config database ở file main-local.php như sau :

 'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=api',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],

ở đây mình kết nối đến database ở localhost với tên database là api ,username là root,pass không có gì .Bạn chỉnh sửa chỗ này phù hợp với các thông số của bạn nhé .

Đã xong phần config ,giờ chúng ta sẽ đi đến việc sử dụng nó như nào 🙂

Đầu tiên bạn phải tạo models trong common để sử dụng được ở cả backend và frontend

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "link".
 *
 * @property integer $id
 * @property string $link
 * @property integer $created_at
 * @property integer $user_id
 */
class Link extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'link';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['link', 'created_at', 'user_id'], 'required'],
            [['created_at', 'user_id'], 'integer'],
            [['link'], 'string', 'max' => 5000],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'link' => Yii::t('app', 'Link'),
            'created_at' => Yii::t('app', 'Created At'),
            'user_id' => Yii::t('app', 'User ID'),
        ];
    }

    /**
     * @inheritdoc
     * @return LinkQuery the active query used by this AR class.
     */
    public static function find()
    {
        return new LinkQuery(get_called_class());
    }
}

Ở đây mình dùng ActiverRecord để dùng truy vấn .Tiếp theo chúng ta sẽ đến phần quan trọng nhất đó là phần controller có nhiệm vụ xử lý dữ liệu

<?php

namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\Link;

class LinkController extends Controller
{
    public function actionIndex()
    {
        $query = Link::find();

        $pagination = new Pagination([
            'defaultPageSize' => 5,
            'totalCount' => $query->count(),
        ]);

        $link = $query->orderBy('name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        return $this->render('index', [
            'link' => $link,
            'pagination' => $pagination,
        ]);
    }
}

Ok giờ đến phần trình bầy dữ liệu cho người dùng .Bạn tạo 1 file tên index.php trong thư mục frontend/views/link

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>link</h1>
<ul>
<?php foreach ($link as $link): ?>
    <li>
        <?= Html::encode("{$link->name} ({$link->code})") ?>:
        <?= $link->population ?>
    </li>
<?php endforeach; ?>
</ul>

<?= LinkPager::widget(['pagination' => $pagination]) ?>

Sau đó bạn cảm nhận thành quả của mình thôi bằng cách vào link : http://localhost/domain/frontend/web/link thôi