YII CRUD 例子

  1. < ? php
  2. class PostTest extends CDbTestCase{
  3.     public $ fixtures = array (
  4.         ‘posts’ = > ‘Post’ ,
  5.         ‘tags’ = > ‘Tag’ ,
  6.     ) ;
  7.     public function testFindPost( ) {
  8.         //调用 find 时,我们使用 $condition 和 $params 指定查询条件。
  9.         //此处 $condition 可以是 SQL 语句中的 WHERE 字符串,$params 则是一个参数数组,
  10.         //其中的值应绑定到 $condation 中的占位符。
  11.         $ post = $ this – > posts( ‘post1’ ) ;
  12.         $ fPost = Post: : model( ) – > find( ‘id = :id’ , array ( ‘:id’ = > $ post – > id) ) ;
  13.         //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`=1 LIMIT 1
  14.         $ fPost = Post: : model( ) – > find( ‘?’ , array ( $ post – > id) ) ;
  15.         //SELECT * FROM `tbl_post` `t` WHERE ‘1’ LIMIT 1
  16.         //find返回符合条件的第一条记录,而findAll会返回符合条件的所有行。
  17.         $ fAllPost = Post: : model( ) – > findAll( ‘id = :id’ , array ( ‘:id’ = > $ post – > id) ) ;
  18.         //SELECT * FROM `tbl_post` `t` WHERE id = ‘1’
  19.         $ fAllPost = Post: : model( ) – > findAll( ‘?’ , array ( $ post – > id) ) ;
  20.         //SELECT * FROM `tbl_post` `t` WHERE ‘1’
  21.         $ criteria = new CDbCriteria( ) ;
  22.         $ criteria – > condition = ‘id = :id AND title = :title’ ;
  23.         $ criteria – > params = array ( ‘:id’ = > $ post – > id, ‘:title’ = > $ post – > title) ;
  24.         $ fPost = Post: : model( ) – > find( $ criteria ) ;
  25.         //SELECT * FROM `tbl_post` `t` WHERE id = ‘1’ AND title = ‘post1’ LIMIT 1
  26.         $ fAllPost = Post: : model( ) – > findAll( $ criteria ) ;
  27.         //SELECT * FROM `tbl_post` `t` WHERE id = ‘1’ AND title = ‘post1’
  28.         $ fPost = Post: : model( ) – > findByPk( $ post – > id, ‘title = :title’ , array ( ‘:title’ = > $ post – > title) ) ;
  29.         //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`=1 AND (title = ‘post1’) LIMIT 1
  30.         $ fPost = Post: : model( ) – > findByAttributes( array ( ‘id’ = > $ post – > id, ‘title’ = > $ post – > title) ) ;
  31.         //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`=’1′ AND `t`.`title`=’post1′ LIMIT 1
  32.         $ sql = ‘SELECT id, title from {{post}} WHERE id = ? AND title = ?’ ; //必须设置表前缀
  33.         $ fPost = Post: : model( ) – > findBySql( $ sql , array ( $ post – > id, $ post – > title) ) ;
  34.         $ sql = ‘SELECT id, title from {{post}} WHERE id = :id AND title = :title’ ;
  35.         $ fPost = Post: : model( ) – > findBySql( $ sql , array ( ‘:id’ = > $ post – > id, ‘:title’ = > $ post – > title) ) ;
  36.         //如果没有找到符合条件的行,find返回null,findAll 返回 array()。
  37.     }
  38.     public function testCountPost( ) {
  39.         $ post = $ this – > posts( ‘post1’ ) ;
  40.         $ cPost = Post: : model( ) – > count ( ‘?’ , array ( $ post – > title) ) ;
  41.         //SELECT COUNT(*) FROM `tbl_post` `t` WHERE ‘post1’ 无意义
  42.         $ cPost = Post: : model( ) – > countByAttributes( array ( ‘title’ = > $ post – > title, ‘content’ = > $ post – >content) ) ;
  43.         //SELECT COUNT(*) FROM `tbl_post` `t` WHERE `t`.`title`=’post1′ AND `t`.`content`=’content1′
  44.         $ sql = “SELECT title from {{post}} WHERE title LIKE ‘%” . $ post – > title . “%'” ;
  45.         $ cPost = Post: : model( ) – > countBySql( $ sql ) ;
  46.         //至少有一条记录符合查询条件
  47.         $ ePost = Post: : model( ) – > exists( ‘id = ?     AND    title = ?’ , array ( $ post – > id, $ post – > title) ) ;
  48.         //SELECT 1 FROM `tbl_post` `t` WHERE id = ‘1’     AND    title = ‘post1’ LIMIT 1
  49.     }
  50.     public function testUpdatePost( ) {
  51.         $ post = $ this – > posts( ‘post1’ ) ;
  52.         $ post – > title = ‘update post 1’ ;
  53.         if ( $ post – > isNewRecord) {
  54.             $ post – > create_time = $ post – > update_time = new CDbExpression( ‘NOW()’ ) ;
  55.             //UPDATE `tbl_post` SET `id`=1, `title`=’update post 1′, `content`=’content1′, `tags`=NULL, `status`=1, `create_time`=NULL, `update_time`=1302161123, `author_id`=1 WHERE `tbl_post`.`id`=1
  56.         } else {
  57.             $ post – > update_time = time ( ) ;
  58.         }
  59.         $ post – > save( ) ;
  60.         //updateAll
  61.         $ sql = “SELECT * FROM {{post}} WHERE title LIKE ‘%” . “post” . “%'” ;
  62.         //SELECT * FROM tbl_post WHERE title LIKE ‘%post%’
  63.         $ post = Post: : model( ) – > findBySql( $ sql ) ;
  64.         $ post – > updateAll( array ( ‘update_time’ = > time ( ) ) , ‘id <= ?’ , array ( ‘2’ ) ) ;
  65.         //UPDATE `tbl_post` SET `update_time`=1302161123 WHERE id <= ‘2’
  66.         $ post – > updateByPk( $ post – > id + 2, array ( ‘title’ = > ‘update post 3’ ) ) ;
  67.         $ post – > updateByPk( $ post – > id, array ( ‘title’ = > ‘update post 3’ ) , ‘id = ?’ , array ( ‘3’ ) ) ;
  68.         //updateCounter 更新某个字段的数值,一般是计数器(+/-)。
  69.         $ tag = $ this – > tags( ‘tag1’ ) ;
  70.         $ uTag = Tag: : model( ) – > updateCounters( array ( ‘frequency’ = > ‘3’ ) , ‘id = ?’ , array ( ‘1’ ) ) ;
  71.     }
  72.     public function testDeletePost( ) {
  73.         $ post = $ this – > posts( ‘post1’ ) ;
  74.         $ post – > delete ( ) ;
  75.         $ this – > assertEquals( 1, $ post – > id) ; //删除数据库表中的记录,但是post的这个实例还在。
  76.         $ post2 = Post: : model( ) – > findByPk( $ post – > id) ;
  77.         $ this – > assertEquals( null , $ post2 ) ;
  78.         //多条记录
  79.         $ delete = Post: : model( ) – > deleteAll( ‘(id = ? AND title = ?) || (id = \’4\’) ‘ , array ( 1, ‘post 1’ ) ) ;
  80.         $ this – > assertEquals( 0, $ delete ) ;
  81.         $ delete = Post: : model( ) – > deleteAllByAttributes( array ( ‘id’ = > ‘2’ ) , ‘content = ?’ , array ( ‘content2’) ) ;
  82.         //DELETE FROM `tbl_post` WHERE `tbl_post`.`id`=’2′ AND (content = ‘content2’)
  83.         $ this – > assertEquals( 1, $ delete ) ;
  84.     }
  85. }
  86. ? >

本文固定链接: http://www.ccsbbs.com.cn/archives/5704.html | 极限手指

该日志由 极限手指 于2013年02月22日发表在 YII 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: YII CRUD 例子 | 极限手指
【上一篇】
【下一篇】

YII CRUD 例子:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!