YII CRUD 例子

<?php 
class PostTest extends CDbTestCase{ 
    public $ fixtures = array ( 
        'posts' = > 'Post' , 
        'tags' = > 'Tag' , 
    ) ;   
    public function testFindPost( )
        //调用 find 时,我们使用 $condition 和 $params 指定查询条件。 
        //此处 $condition 可以是 SQL 语句中的 WHERE 字符串,$params 则是一个参数数组, 
        //其中的值应绑定到 $condation 中的占位符。 
        $ post = $ this - > posts( 'post1' ) ; 
        $ fPost = Post: : model( ) - > find( 'id = :id' , array ( ':id' = > $ post - > id) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`=1 LIMIT 1 
         
        $ fPost = Post: : model( ) - > find( '?' , array ( $ post - > id) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE '1' LIMIT 1 
         
        //find返回符合条件的第一条记录,而findAll会返回符合条件的所有行。 
        $ fAllPost = Post: : model( ) - > findAll( 'id = :id' , array ( ':id' = > $ post - > id) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE id = '1' 
         
        $ fAllPost = Post: : model( ) - > findAll( '?' , array ( $ post - > id) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE '1' 
         
        $ criteria = new CDbCriteria( ) ; 
        $ criteria - > condition = 'id = :id AND title = :title' ; 
        $ criteria - > params = array ( ':id' = > $ post - > id, ':title' = > $ post - > title) ; 
        $ fPost = Post: : model( ) - > find( $ criteria ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE id = '1' AND title = 'post1' LIMIT 1 
         
        $ fAllPost = Post: : model( ) - > findAll( $ criteria ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE id = '1' AND title = 'post1' 
         
        $ fPost = Post: : model( ) - > findByPk( $ post - > id, 'title = :title' , array ( ':title' = > $ post - > title) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`=1 AND (title = 'post1') LIMIT 1 
         
        $ fPost = Post: : model( ) - > findByAttributes( array ( 'id' = > $ post - > id, 'title' = > $ post - > title) ) ; 
        //SELECT * FROM `tbl_post` `t` WHERE `t`.`id`='1' AND `t`.`title`='post1' LIMIT 1 
         
        $ sql = 'SELECT id, title from {{post}} WHERE id = ? AND title = ?' ; //必须设置表前缀 
        $ fPost = Post: : model( ) - > findBySql( $ sql , array ( $ post - > id, $ post - > title) ) ; 
         
        $ sql = 'SELECT id, title from {{post}} WHERE id = :id AND title = :title' ; 
        $ fPost = Post: : model( ) - > findBySql( $ sql , array ( ':id' = > $ post - > id, ':title' = > $ post - > title) ) ; 
         
        //如果没有找到符合条件的行,find返回null,findAll 返回 array()。 
         
   
     
    public function testCountPost( )
        $ post = $ this - > posts( 'post1' ) ; 
         
        $ cPost = Post: : model( ) - > count ( '?' , array ( $ post - > title) ) ; 
        //SELECT COUNT(*) FROM `tbl_post` `t` WHERE 'post1' 无意义 
         
        $ cPost = Post: : model( ) - > countByAttributes( array ( 'title' = > $ post - > title, 'content' = > $ post - >content) ) ; 
        //SELECT COUNT(*) FROM `tbl_post` `t` WHERE `t`.`title`='post1' AND `t`.`content`='content1' 
         
        $ sql = "SELECT title from {{post}} WHERE title LIKE '%" . $ post - > title . "%'" ; 
        $ cPost = Post: : model( ) - > countBySql( $ sql ) ; 
        //至少有一条记录符合查询条件 
        $ ePost = Post: : model( ) - > exists( 'id = ?     AND     title = ?' , array ( $ post - > id, $ post - > title) ) ; 
        //SELECT 1 FROM `tbl_post` `t` WHERE id = '1'     AND     title = 'post1' LIMIT 1 
   
     
    public function testUpdatePost( )
        $ post = $ this - > posts( 'post1' ) ; 
        $ post - > title = 'update post 1' ; 
         
        if ( $ post - > isNewRecord) { 
            $ post - > create_time = $ post - > update_time = new CDbexpression_r( 'NOW()' ) ; 
            //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 
        } else { 
            $ post - > update_time = time ( ) ; 
       
         
        $ post - > save( ) ; 
         
         
        //updateAll 
        $ sql = "SELECT * FROM {{post}} WHERE title LIKE '%" . "post" . "%'" ; 
        //SELECT * FROM tbl_post WHERE title LIKE '%post%' 
         
        $ post = Post: : model( ) - > findBySql( $ sql ) ; 
        $ post - > updateAll( array ( 'update_time' = > time ( ) ) , 'id <= ?' , array ( '2' ) ) ; 
        //UPDATE `tbl_post` SET `update_time`=1302161123 WHERE id <= '2' 
         
        $ post - > updateByPk( $ post - > id + 2, array ( 'title' = > 'update post 3' ) ) ; 
        $ post - > updateByPk( $ post - > id, array ( 'title' = > 'update post 3' ) , 'id = ?' , array ( '3' ) ) ; 
         
        //updateCounter 更新某个字段的数值,一般是计数器(+/-)。 
        $ tag = $ this - > tags( 'tag1' ) ; 
        $ uTag = Tag: : model( ) - > updateCounters( array ( 'frequency' = > '3' ) , 'id = ?' , array ( '1' ) ) ; 
   
     
    public function testDeletePost( )
        $ post = $ this - > posts( 'post1' ) ; 
        $ post - > delete ( ) ; 
         
         
        $ this - > assertEquals( 1, $ post - > id) ; //删除数据库表中的记录,但是post的这个实例还在。 
        $ post2 = Post: : model( ) - > findByPk( $ post - > id) ; 
        $ this - > assertEquals( null , $ post2 ) ; 
         
        //多条记录 
        $ delete = Post: : model( ) - > deleteAll( '(id = ? AND title = ?) || (id = \'4\') ' , array ( 1, 'post 1' ) ) ; 
        $ this - > assertEquals( 0, $ delete ) ; 
         
        $ delete = Post: : model( ) - > deleteAllByAttributes( array ( 'id' = > '2' ) , 'content = ?' , array ( 'content2') ) ; 
        //DELETE FROM `tbl_post` WHERE `tbl_post`.`id`='2' AND (content = 'content2') 
        $ this - > assertEquals( 1, $ delete ) ; 
   
? >

原文:http://xiang.lf.blog.163.com/blog/static/127733322201242810411130 2/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值