PHP Yii AR数据库操作实例

官方的AR操作文档在:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar

在看过AR的官方文档后,由于官文讲的数据库操作的例子太少了,虽然概念讲的很详细,但仍然对AR无从下手,特别是AR类的想法增删改查的方法,参数根本不知道如何调用。本文的主要目的是,结合官文,提供更多的操作实例,让大家快速上手AR。

以下实例是基于官文的,请大家在阅读本篇文章时,同时查看官方文档。实例中使用的数据库表例子也是官文中提到的:

CREATE TABLE tbl_post (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    title VARCHAR(128) NOT NULL,
    content TEXT NOT NULL,
    create_time INTEGER NOT NULL
);

代码实例如下,如果对方法调用,特别是参数有疑问的,请参考官文中对参数的解释,以及这些方法的定义。

<?php
	
	class PostController extends CController{
		
		public function actionCreate(){
			$post = new PostModel();
			
			$post->title = 'iPhone 5';
			$post->content = 'iPhone5 content';
			$post->create_time = time();
			
			if($post->save()){
				echo __CLASS__.".".__FUNCTION__." success.<br>";
			}
		}
		
		public function actionSearch(){
// 			/**
// 			 * find
// 			 * @var unknown
// 			 */
// 			$post = PostModel::model()->find("title=:tt", array(':tt'=>'iPhone 6s'));
			
// // 			var_dump($post);
// 			foreach ($post as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
// 			/**
// 			 * find by criteria
// 			 */
// 			$critetia = new CDbCriteria();
// 			$critetia->select = 'title,content';
// 			$critetia->condition = 'id=:id';
// 			$critetia->params = array(':id'=>3);
// 			$post2 = PostModel::model()->find($critetia);
			
// 			foreach ($post2 as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
// 			/**
// 			 * find by array
// 			 */
// 			$post3 = PostModel::model()->find(array(
// 					'select'=>'id,title',
// 					'condition'=>'id=:id',
// 					'params'=>array(':id'=>1),
// 			));
			
//  			foreach ($post3 as $_key => $_value){
//  				echo "{$_key} : {$_value}<br>";
//  			}
 			

// 			/**
// 			 * find by pk
// 			 */
// 			$post4 = PostModel::model()->findByPk(1,"title=:tt", array(':tt'=>'iPhone 6s')
// 			);
				
// 			foreach ($post4 as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
// 			/**
// 			 * find by Attributes
// 			 */
// 			$post5 = PostModel::model()->findByAttributes(array('title'=>'iPhone 6s','id'=>1)/*,"title=:tt", array(':tt'=>'iPhone 6s')*/
// 					);
			
// 			foreach ($post5 as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
// 			/**
// 			 * find by sql
// 			 */
// 			$sql="select * from {{post}} where id=3";
// 			$post6 = PostModel::model()->findBySql($sql);
				
// 			foreach ($post6 as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
// 			/**
// 			 * find by Attributes
// 			 */
// 			$post6 = PostModel::model()->findAllByAttributes(array('title'=>'iPhone 5')/*,"title=:tt", array(':tt'=>'iPhone 6s')*/
// 					);
// 			foreach ($post6 as $p)
// 			foreach ($p as $_key => $_value){
// 				echo "{$_key} : {$_value}<br>";
// 			}
			
			//findAll系列查询函数与find系列用法一致,此处仅举例findAllByAttributes,其他几个函数的用法同上面find函数。
			/**
				// 查找满足指定条件的所有行
				$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);
			*/
			
			/**
			 * 返回符合条件的行数
			 */
			$lines = PostModel::model()->count('title=:title', array(':title'=>'iPhone 5'));
			echo "line : {$lines}<br>";
			
			//查询符合条件的数据行数,也可以使用如下函数
			/*
			 	// 获取满足指定条件的行数
				$n=Post::model()->count($condition,$params);
				// 通过指定的 SQL 获取结果行数
				$n=Post::model()->countBySql($sql,$params);
			 */
		}
		
		/**
		 * update
		 */
		public function actionUpdate(){
			/**
			 * 使用静态方法model()创建的对象,在更新时,更新这些行
			 * @var unknown
			 */
// 			$post = PostModel::model()->findByPk(2);
// 			$post->title='iPhone 6';
// 			if ($post->save()){
// 				echo "update success.<br>";
// 			}
// 			else{
// 				echo "update failed.<br>";
// 			}
			
			/**
			 * 使用new创建的对象,在更新时,将会新增一行。
			 * @var unknown
			 */
// 			$post = new PostModel();
// 			$post->findByPk(2);
// 			$post->title='iPhone 3';
// 			if ($post->save()){
// 				echo "update success.<br>";
// 			}
// 			else{
// 				echo "update failed.<br>";
// 			}
			
			/**
			 * 上面的方法,首先执行一次查询,然后将查询结果加载出来,执行更改后,再保存到数据库中。
			 * 下面的方法不需要将数据事先加载出来,直接就可以更新数据库
			 * 注意:如果没有符合更新条件的更新操作,更新结果会返回失败。如果更新的值和原值是一样的,也会更新失败。
			 */
			$isUpdateSuccess = PostModel::model()->updateAll(array(
					'title'=>'iPhone 1',
			), 'id=:id', array(
					':id'=>2,
			));
			
			if ($isUpdateSuccess){
				echo "updateAll success.<br>";
			}
			else {
				echo "updateAll failed.<br>";
			}
			
			/**
			 * 还可以使用如下几种方法进行更新操作
			 	// 更新符合指定条件的行
				Post::model()->updateAll($attributes,$condition,$params);
				// 更新符合指定条件和主键的行
				Post::model()->updateByPk($pk,$attributes,$condition,$params);
				// 更新满足指定条件的行的计数列
				Post::model()->updateCounters($counters,$condition,$params);
			 */
		}
		
		/**
		 * 数据库删除操作
		 */
		public function actionDelete(){
			/*
			 * 先查询再删除
			 */
			$post1 = PostModel::model()->findByPk(2);
			if ($post1->delete()){
				echo "delete success.<br>";
			}
			else{
				echo "delete failed.<br>";
			}
			
			/*
			 * 以下方法可以在不事先查询并加载出查询结果的情况下进行删除,效率较高
			 * 以下函数用法与上面的更新操作类似,不再举例。
			 */
// 			// 删除符合指定条件的行
// 			Post::model()->deleteAll($condition,$params);
// 			// 删除符合指定条件和主键的行
// 			Post::model()->deleteByPk($pk,$condition,$params);
		}
}
		


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值