YII2框架连接数据库操作
使用数据库,是一个框架的核心之一(还有一个重要的核心就是路由实现),对一个框架如何连接数据库进行研究,有助于理解这个框架是如何构建的。Yii2框架的数据库访问建立在PHP PDO之上,提供了一个数据库访问层(DAO)访问不同的数据库(MYSQL,SQLite,MSSQL等等)。
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 yiidbQuery(); $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 appmodels; use yiidbActiveRecord; 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类的数据
备注:在实际开发工作中,推荐使用第三种方式连接数据库。
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 appmodels; 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 yiidbActiveRecord { /** * @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更加强大,能够自动生成增删查改的功能,尤其适合于后台声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。