YII2框架连接数据库操作

本文详细介绍了Yii2框架中连接和操作数据库的方法,包括使用SQL基础查询、查询构建器和Active Record。重点讲述了Active Record类的定义及调用方式,并通过Gii工具生成Model,以及如何利用CRUD Generator进行增删查改操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用数据库,是一个框架的核心之一(还有一个重要的核心就是路由实现),对一个框架如何连接数据库进行研究,有助于理解这个框架是如何构建的。Yii2框架的数据库访问建立在PHP PDO之上,提供了一个数据库访问层(DAO)访问不同的数据库(MYSQL,SQLite,MSSQL等等)。

Yii连接数据库的方式


1. 使用SQL基础查询

$data = \Yii::$app->db->createCommand('SELECT * FROM `test`')->queryAll();
var_dump($data); //以数组的形式返回数据

2.使用查询构建器

第一种方式有一个比较不好的地方,就是当数据库变更的时候,需要修改sql语句才能正常运行。比如从MYSQL迁移到MSSQL,MYSQL中的limit语法在MSSQL中并不能使用。查询构建器可以创建与DBMS无关的SQL语句。
$queryObj=new \yii\db\Query();
$data=$queryObj->select(['ID','T_NAME','NUMBER'])
	->from('test')
	->limit(3)
	->all();
var_dump($data);<span style="font-family: Arial, Helvetica, sans-serif;"> //以数组的形式返回数据

3.使用Active Record

Active Record (活动记录,以下简称AR)提供了一个面向对象的接口, 用以访问数据库中的数据。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。

Active Record类定义

namespace app\models;

use yii\db\ActiveRecord;

use Yii;

class Test extends ActiveRecord
{
	/**
	 * @return string 返回该AR类关联的数据表名
	 */
	public static function tableName()
	{
		return 'test';
	}
}

调用方式

1)新建一个Test类,并保存到数据库
$testObj = new Test();
$testObj->T_NAME = 'lizhibin';
$testObj->NUMBER = 999;
$testObj->save();
2)查询数据
var_dump(Test::find()->where(['T_NAME'=>'a'])->all());//返回符合条件Test类的数据

备注:在实际开发工作中,推荐使用第三种方式连接数据库。

使用Gii生成Model

1.数据库设计

在使用Gii生成model的时候,必须先创建好数据表:
CREATE TABLE `message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `content` text CHARACTER SET utf8 NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.使用Gii

通过http://[host]/index.php?r=gii进入到Gii页面,注意需要配置YII_ENV为‘dev’才能够使用。点击Model Generator,生成message表对应的Message Model。
打开生成的Message文件,发现Gii自动创建了一个类,代码如下:
<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "message".
 *
 * @property integer $id
 * @property string $title
 * @property string $content
 * @property string $create_time
 */
class Message extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'message';  //返回数据库表名
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        //返回Message类的规则
        return [
            [['content', 'create_time'], 'required'],
            [['content'], 'string'],
            [['create_time'], 'safe'],
            [['title'], 'string', 'max' => 64],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        //返回属性标签,用于表单显示
        return [
            'id' => 'ID',
            'title' => 'Title',
            'content' => 'Content',
            'create_time' => 'Create Time',
        ];
    }
}
参考链接: http://www.yiichina.com/doc/guide/2.0/start-gii

3.使用CRUD Generator生成简单的增删查改

CRUD Generator比Model Generator更加强大,能够自动生成增删查改的功能,尤其适合于后台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值