牛骨文教育服务平台(让学习变的简单)
博文笔记

YII Framework学习教程-YII的Model-数据库操作1-CActiveRecord

创建时间:2011-11-29 投稿人: 浏览次数:250

     YII中的DAO(数据库访问对象)是建立在PHP的PDO之上的,所以你开发的应用可以很容易的在不同的数据库系统平台之间进行切换,而只需要修改少量代码。YII采用ORM(Object-Relational Mapping)的设计模式进行数据库编程,简化了一些繁琐的的数据库操作。

       在YII中的DAO的相关类主要存放在/yii_dev/yii/framework/db和/yii_dev/yii/framework/web,通常名称带有DB或者Data。

       在YII中操作数据库我们主要是使用CActiveRecord,它继承CModel。用CActiveRecord可以完成对数据CURD操作的大部分任务。  但是对于有复杂逻辑的数据库查询操作,用CActiveRecord就力不从心了,后续将会讲解YII如何处理复杂的数据库查询操作。

       在ORM中通常用Object(对象)来表示一个Relation(关系),可以理解为一个类对应一个数据表或者视图。类的属性可以认为是和数据表的列一一对应的,类中的方法是用于对数据库操作的方法例如CURD。

      这里讲一下CActiveRecord如何使用。

      一般如果是基本的操作我们可以用yiic自动生产curd系列的操作。这里在不多说明。主要说明如果手写代码,我们的程序要遵循的基本规则。

      1.设计表

        开始之前我们先来定义我们要操作的表。这里使用mysql,数据库是testdrive,使用的表结构如下:

       

CREATE TABLE `tbl_user` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`username` VARCHAR(128) NOT NULL,
	`password` VARCHAR(128) NOT NULL,
	`email` VARCHAR(128) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE="utf8_general_ci"
ENGINE=MyISAM

       2.配置数据库链接

              在/testwebap/protected/config/main.php配置文件

		"db"=>array(
			"connectionString" => "mysql:host=localhost;dbname=testdrive",
			"emulatePrepare" => true,
			"username" => "root",
			"password" => "",
			"charset" => "utf8",
		),

       3.定义数据库操作类。

           要继承CActiveRecord ,其实经过前面章节的说明,这里的代码完全可以自动生成,这里定义基本的类,做说明。基本代码如下:

<?php
class TblUser extends CActiveRecord
{
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
	public function tableName()
	{
		return "tbl_user";
	}
}

      4.使用:实例化我们的数据库操作类。

       在/yii_dev/testwebap/protected/modules/testmod/controllers/DefaultController.php定义DefaultController。具体结构如下:

<?php

class DefaultController extends Controller
{
	public function actionIndex()
	{ 
		$this->render("index");
	}
}

      实例化我们的数据库操作类,具体代码如下:

<?php

class DefaultController extends Controller
{
	public function actionIndex()
	{ 
	    $model=new TblUser;
	    var_dump($model);
	    exit;
		$this->render("index");
	}
}

运行http://www.localyii.com/testwebap/index.php/testmod/default/index

如果不出异常,会打印如下类似的信息,表示你的操作类可以正常使用

object(TblUser)#14 (12) { ["_md":"CActiveRecord":private]=> object(CActiveRecordMetaData)#16 (5) { ["tableSchema"]=> object(CMysqlTableSchema)#20 (9) { ["schemaName"]=> NULL ["name"]=> string(8) "tbl_user" ["rawName"]=> string(10) "`tbl_user`" ["primaryKey"]=> string(2) "id" ["sequenceName"]=> string(0) "" ["foreignKeys"]=> array(0) { } ["columns"]=> array(4) { ["id"]=> object(CMysqlColumnSchema)#21 (14) { ["name"]=> string(2) "id" ["rawName"]=> string(4) "`id`" ["allowNull"]=> bool(false) ["dbType"]=> string(7) "int(11)" ["type"]=> string(7) "integer" ["defaultValue"]=> NULL ["size"]=> int(11) ["precision"]=> int(11) ["scale"]=> NULL ["isPrimaryKey"]=> bool(true) ["isForeignKey"]=> bool(false) ["autoIncrement"]=> bool(true) ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } ["username"]=> object(CMysqlColumnSchema)#22 (14) { ["name"]=> string(8) "username" ["ra
     

           5.使用:插入一行数据。


<?php
class DefaultController extends Controller
{
    public function actionIndex ()
    {
        $model = new TblUser();
        $model->username = "admin";
        $model->password = "123456";
        $model->email = "admin@admin.com";
        
        var_dump($model->save());
        exit();
        $this->render("index");
    }
}

http://www.localyii.com/testwebap/index.php/testmod/default/index

如果打印的是bool(true),查看一下数据库可以看到,我们的数据已经存入到数据库中。

 这里TblUser中虽然没有明确的指定数据表的列的名称,但是我们还是可以直接使用。这都是yii悄悄为我们做的。这样的操作岂不是很爽。还有TblUser是继承的CActiveRecord,也继承与CModel当然也是CComponent,所以他们的方法我们都可以使用。修改,删除,查找,比较,你想要的函数应有尽有,这里不再详细做讲解,自己慢慢分析代码,才能更好的掌握这些方法的使用。

       下的时间交给官方文档,看看官方文档讲CActiveRecord的常见方法。

        具体网址是:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar

        //详细内容如下://///////////////

         

Active Record 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。