Yii框架学习笔记(四)连接数据库

2014-04-13 19:17:13

YII采用ORM(object-Relation Mapping)的设计模式进行数据库编程。

配置数据库连接 在protected/config/main.php文件中:

[php]’db’=>array(
‘connectionString’=>’mysql:host=localhost;dbname=testdrive’,
’emulatePreare’=>true,
‘username’=>’root’,
‘password’=>”,
‘charset’=>’utf8’,
),[/php]

定义数据库操作类:models

[php]

class User extends CActiveRecord{
public static function model(CLASS){

return parent::model($className);

}
//静态方法model()是每一个AR类所必须的。

public function tableName(){

return ‘{{User}}’;

}
}

?>[/php]

实例化数据库操作类:controllers

[php] class UserController extends Controller{

public function actionIndex(){

$model = new User;
$model->username = ‘admin’;
$model->password = ‘123456’;
$model->email = ‘admin@admin.com’;
var_dump($model->save());
exit;
$this->render(‘index’);

}

}

?>[/php]

读取记录:

[php]

//查找满足指定条件的结果中的一行

$user = User::model->find($condition,$params);

//查找具有指定主键值得那一行

$user = User::model->findByPk($postId,$condition,$params);

//查找具有指定属性值的行

$user = User::model->findByAttributes($attributes,$condition,$params);

//通过指定的SQL语句查找结果中的第一行
$user = User::model->findBySql($sql,$params);

// 查找满足指定条件的所有行

$posts=Post::model()->findAll($condition,$params);

// 查找带有指定主键的所有行

$posts=Post::model()->findAllByPk($postIDs,$condition,$params);

// 查找带有指定属性值的所有行

$posts=Post::model()->findAllByAttributes($attributes,$condition,$params);

// 通过指定的SQL语句查找所有行

$posts=Post::model()->findAllBySql($sql,$params);[/php]

我们可以让$condition成为一个CDbCriteria的实例。

[php]$criteria = new CDbCriteria;

$criteria->select = ‘title’; //只选择’title’列

$criteria->condition = ‘postID=:postID’;

$criteria->params = array(‘:postID’=>10);

$post = Post::model->find($criteria); //$params不需要了
// 获取满足指定条件的行数

$n=Post::model()->count($condition,$params);

// 通过指定的 SQL 获取结果行数

$n=Post::model()->countBySql($sql,$params);

// 检查是否至少有一行复合指定的条件

$exists=Post::model()->exists($condition,$params);[/php]

更新记录:

[php]

$post = Post::model->findByPk(10);

$post->title = ‘new post title’;

$post->save(); //将更改保存到数据库

//更新符合指定条件的行

Post::model->updateAll($attributes,$condition,$params);

//更新符合指定条件和主键的行

Post::model->updateByPk($pk,$attributes,$condition,$params);

//更新满足指定条件的行的计数列

Post::model->updateCounters($counters,$condition,$params);[/php]

删除数据:

[php]$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10

$post->delete(); // 从数据表中删除此行

// 删除符合指定条件的行

Post::model()->deleteAll($condition,$params);

// 删除符合指定条件和主键的行

Post::model()->deleteByPk($pk,$condition,$params);[/php]

Yii框架学习笔记(三)将后台模板整合到框架

将后台模板整合到框架中有两种方法,一种是两个入口文件,另一种可以把后台做为一个模块。 一,两个入口文件方法: 项目目录结构(图): 前后台引导文件分别如下: index.php: [php]require(‘path/to/yii.php’); Yii::app()->createWebApplication(‘protected/config/main.php’)->run();[/php] admin.php: [php]require(‘path/to/yii.php’); Yii::app()->createWebApplication(‘protected/admin/config/main.php’)->run();[/php] 这样配置比较麻烦一些,我们可以采用覆盖的方法,参考了一个贴子的方法,

Yii Property "CDbConnection.tableprefix" is not defined.

I’m new to the Yii framework. I created a table named ‘tbluser’, had set the tablePrefix to ‘tbl’ in main.php in the ‘db’ array. When I ran the model command from the yii shell script , I got the following: Stack Trace: [php] #0 W:\newwamp\www\shop\framework\