Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出。灰常感谢!!!
一、查询数据集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//1.该方法是根据一个条件查询一个集合 $admin =Admin::model()->findAll( $condition , $params ); $admin =Admin::model()->findAll( "username=:name" , array ( ":name" => $username )); $infoArr = NewsList::model()->findAll( "status = '1' ORDER BY id DESC limit 10 " ); //2. findAllByPk(该方法是根据主键查询一个集合,可以使用多个主键) $admin =Admin::model()->findAllByPk( $postIDs , $condition , $params ); $admin =Admin::model()->findAllByPk( $id , "name like :name and age=:age" , array ( ':name' => $name , 'age' => $age )); $admin =Admin::model()->findAllByPk( array (1,2)); //3.findAllByAttributes (该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面) $admin =Admin::model()->findAllByAttributes( $attributes , $condition , $params ); $admin =Admin::model()->findAllByAttributes( array ( 'username' => 'admin' )); //4.findAllBySql (该方法是根据SQL语句查询一个数组) $admin =Admin::model()->findAllBySql( $sql , $params ); $admin =Admin::model()->findAllBySql( "select * from admin where username like :name" , array ( ':name' => '%ad%' )); |
二、查询对象的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
//根据主键查询出一个对象,如:findByPk(1); $admin =Admin::model()->findByPk( $postID , $condition , $params ); $admin =Admin::model()->findByPk(1); //根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据 $row =Admin::model()->find( $condition , $params ); $row =Admin::model()->find( 'username=:name' , array ( ':name' => 'admin' )); //该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,查询的也是第一条数据 $admin =Admin::model()->findByAttributes( $attributes , $condition , $params ); $admin =Admin::model()->findByAttributes( array ( 'username' => 'admin' )); //该方法是根据SQL语句查询一组数据,他查询的也是第一条数据 $admin =Admin::model()->findBySql( $sql , $params ); $admin =Admin::model()->findBySql( "select * from admin where username=:name" , array ( ':name' => 'admin' )); //拼一个获得SQL的方法,在根据find查询出一个对象 $criteria = new CDbCriteria; $criteria ->select= 'username' ; // only select the 'title' column $criteria ->condition= 'username=:username' ; //请注意,这是一个查询的条件,且只有一个查询条件.多条件用addCondition $criteria ->params= array ( ":username=>'admin'" ); $criteria ->order = "id DESC" ; $criteria ->limit = "3" ; $post =Post::model()->find( $criteria ); // $params isnot needed //多条件查询的语句 $criteria = new CDbCriteria; $criteria ->addCondition( "id=1" ); //查询条件,即where id = 1 $criteria ->addInCondition( 'id' , array (1,2,3,4,5)); //代表where id IN (1,2,3,4,5,); $criteria ->addNotInCondition( 'id' , array (1,2,3,4,5)); //与上面正好相法,是NOT IN $criteria ->addCondition( 'id=1' , 'OR' ); //这是OR条件,多个条件的时候,该条件是OR而非AND $criteria ->addSearchCondition( 'name' , '分类' ); //搜索条件,其实代表了。。where name like '%分类%' $criteria ->addBetweenCondition( 'id' , 1, 4); //between 1 and 4 $criteria ->compare( 'id' , 1); //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition. $criteria ->compare( 'id' , array (1,2,3)); //即如果第二个参数是数组就会调用addInCondition $criteria ->select = 'id,parentid,name' ; //代表了要查询的字段,默认select='*'; $criteria ->join = 'xxx' ; //连接表 $criteria ->with = 'xxx' ; //调用relations $criteria ->limit = 10; //取1条数据,如果小于0,则不作处理 $criteria ->offset = 1; //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10 $criteria ->order = 'xxx DESC,XXX ASC' ; //排序条件 $criteria ->group = 'group 条件' ; $criteria ->having = 'having 条件 ' ; $criteria ->distinct = FALSE; //是否唯一查询 |
三、查询个数,判断查询是否有结果
1
2
3
4
5
6
7
8
9
10
11
|
//该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字 $n =Post::model()-> count ( $condition , $params ); $n =Post::model()-> count ( "username=:name" , array ( ":name" => $username )); //该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字 $n =Post::model()->countBySql( $sql , $params ); $n =Post::model()->countBySql( "select * from admin where username=:name" , array ( ':name' => 'admin' )); //该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到 $exists =Post::model()->exists( $condition , $params ); $exists =Post::model()->exists( "name=:name" , array ( ":name" => $username )); |
四、添加的方法
1
2
3
4
|
$admin = new Admin; $admin ->username = $username ; $admin ->password = $password ; if ( $admin ->save() > 0){ echo "添加成功" ; } else { echo "添加失败" ; } |
五、修改的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Post::model()->updateAll( $attributes , $condition , $params ); $count =Admin::model()->updateAll( array ( 'username' => '11111' , 'password' => '11111' ), 'password=:pass' , array ( ':pass' => '1111a1' )); if ( $count > 0){ echo "修改成功" ; } else { echo "修改失败" ; } $rt = PostList::model()->updateAll( array ( 'status' => '1' ), 'staff_id=:staff AND host_id=:host' , array ( ':staff' => $staff_id , ':host' => $host_id )); //$pk主键,可以是一个也可以是一个集合,$attributes是要修改的字段的集合,$condition条件,$params传入的值 Post::model()->updateByPk( $pk , $attributes , $condition , $params ); $count =Admin::model()->updateByPk(1, array ( 'username' => 'admin' , 'password' => 'admin' )); $count =Admin::model()->updateByPk( array (1,2), array ( 'username' => 'admin' , 'password' => 'admin' ), 'username=:name' , array ( ':name' => 'admin' )); if ( $count >0){ echo "修改成功" ; } else { echo "修改失败" ; } Post::model()->updateCounters( $counters , $condition , $params ); $count =Admin::model()->updateCounters( array ( 'status' =>1), 'username=:name' , array ( ':name' => 'admin' )); if ( $count > 0){ echo "修改成功" ; } else { echo "修改失败" ; } //array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1 |
六、删除的方法
1
2
3
4
5
6
7
8
9
10
11
|
//deleteAll Post::model()->deleteAll( $condition , $params ); $count = Admin::model()->deleteAll( 'username=:name and password=:pass' , array ( ':name' => 'admin' , ':pass' => 'admin' )); $count = Admin::model()->deleteAll( 'id in("1,2,3")' ); //删除id为这些的数据 if ( $count >0){ echo "删除成功" ; } else { echo "删除失败" ; } //deleteByPk Post::model()->deleteByPk( $pk , $condition , $params ); $count = Admin::model()->deleteByPk(1); $count =Admin::model()->deleteByPk( array (1,2), 'username=:name' , array ( ':name' => 'admin' )); if ( $count >0){ echo "删除成功" ; } else { echo "删除失败" ; } |
七、更多方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//createCommand(执行原生的SQL语句) $sql = "SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id" ; $rows =Yii::app()->db->createCommand( $sql )->query(); foreach ( $rows as $k => $v ){ echo $v [ 'add_time' ]; } //事务的基本结构(多表更新插入操作请使用事务处理) $dbTrans = Yii::app()->db->beginTransaction(); try { $post = new Post; $post -> 'title' = 'Hello dodobook!!!' ; if (! $post ->save()) throw new Exception( "Error Processing Request" , 1); $dbTrans ->commit(); // $this->_end(0,'添加成功!!!'); } catch (Exception $e ){ $dbTrans ->rollback(); // $this->_end($e->getCode(),$e->getMessage()); } |
Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]的更多相关文章
- Django数据库操作(增删改查)
Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...
- Android下数据库操作——增删改查
Android下数据库第一种方式增删改查 1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用SqliteDat ...
- spring框架学习之--数据库操作增删改查
基于spring的NamedParameterJdbcTemplate操作数据库 首先在 resources 文件夹下添加数据库配置文件jdbc.properties 配置常用的数据库信息 consu ...
- SpringBoot 数据库操作 增删改查
1.pom添加依赖 <!--数据库相关配置--> <dependency> <groupId>org.springframework.boot</groupI ...
- Yii2.0数据库操作增删改查详解
1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average(): ...
- django数据库操作-增删改查-多对多关系以及一对多(外键)关系
一.一对多(外键) 例子:一个作者对应多本书,一本书只有一个作者 model代码: class Person(models.Model); name = models.CharField('作者姓名' ...
- 转: django数据库操作-增删改查-多对多关系以及一对多(外键)关系
原文链接:http://blog.csdn.net/u010271717/article/details/22044415 一.一对多(外键) 例子:一个作者对应多本书,一本书只有一个作者 model ...
- 使用JDBC连接MySQL数据库操作增删改查
目录 1.首先这个Myeclipse的包名以及一些实现的类(这样子写是我的习惯) 2.接下来我们创建数据库(MySQL) 3.在数据库里面添加数据 4.首先是BaseDao,这个是重中之重,注意那个数 ...
- 通过Loadruner对mysql数据库进行增删改查
操作mysql数据库,是在实现mysql数据源配置的基础上操作,可先阅读:loadrunner参数化使用mysql数据源失败解决方法 写之前先理一下,数据库访问流程:打开数据库 --> 数据库 ...
随机推荐
- Objective-C:Foundation框架-结构体
在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发. ...
- JVM调优(这里主要是针对优化基于分布式Mahout的推荐引擎)
优化推荐系统的JVM关键参数 -Xmx 设定Java允许使用的最大堆空间.例如-Xmx512m表示堆空间上限为512MB -server 现代JVM有两个重要标志:-client和-server,分别 ...
- MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
文章索引和简介 通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种 ...
- js在mootools框架下的new Class
首先,在HTML文件中引入mootools.js. mootools-more.js.mootools-core.js,然后就能使用mootools封装的一些特性. 几乎类似于面向对象. mootoo ...
- linux 下echo命令写入文件内容
http://blog.csdn.net/xukai871105/article/details/35834703 echo "Raspberry" > test.txt
- ios 定位获取当前位置信息
啊,倦怠的人生啊~~ 什么事情都没做一眨眼就2点半了啊!!赶紧爬起来写博客啊. 诸位看官会鄙视我么,表示我真心不是把这当技术文章写的啊. 啊,下午我们来第二篇.获取地理位置信息.嗯嗯,秘籍上说叫逆向地 ...
- ajax分页2:jquery.pagination +JSON 动态无刷新分页
静态页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- ZOJ 3654 Letty's Math Class 模拟 难度:0
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4844 题意:给你一个只包含中括号和正整数,+,-,结果在longlong范围内 ...
- java.io.IOException: open failed: EACCES (Permission denied)问题解决
1. 问题描述:在Android中,用程序访问Sdcard时,有时出现“java.io.IOException: open failed: EACCES (Permission denied)&qu ...
- 在VS2010中打开VS2012的项目
修改工程文件来把VS2012的工程文件移植到VS2010中 首先是修改解决方案文件(.sln文件). 使用记事本打开,把里面的 Microsoft Visual Studio Solution Fil ...