• 技术文章 >php框架 >YII

    yii2中dao和ar区别

    (*-*)浩(*-*)浩2019-11-05 13:20:41原创865
    Active Record(AR)是一个流行的对象-关系映射(ORM)技术。每个AR 类代表一个数据表(或视图),数据表(或视图)的列在AR 类中体现为类的属性,一个AR 实例则表示表中的一行。常见的CRUD 操作作为AR 的方法实现。

    因此,我们可以以一种更加面向对象的方式访问数据。$c = new CDbCriteria();是ActiveRecord的一种写法,使ActiveRecord更加灵活,而拼装sql则是最常见不过,下面看两个例子。 (推荐学习:yii教程

    注意:AR 并非要解决所有数据库相关的任务。它的最佳应用是模型化数据表为PHP 结构和执行不包含复杂SQL 语句的查询。对于复杂查询的场景,应使用Yii DAO。

    $criteria = new CDbCriteria;       
    //函数方式 
    $criteria->addCondition("id=1"); //查询条件,即where id = 1   
    $criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,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,   
                                    //即如果第二个参数是数组就会调用addInCondition   
    $criteria->addCondition("id = :id");   
    $criteria->params[':id']=1;   
          
    //属性方式   
    $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; //是否唯一查询

    Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)扩展上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS)。使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码。下面是DAO的例子:

    示例代码

    /**
         * 关于DAO的例子
         * 获取所有用户名
         */
        public function getUsernames ()
        {
            $sqlStatement = ' SELECT `username` FROM `testdrive`.`tbl_user` ';
            $this->command = $this->connection->createCommand($sqlStatement);
            return $this->command->queryAll();
        }
        /**
         *
         * 添加一个用户
         */
        public function addUser ()
        {
            $sqlStatement = " INSERT INTO `tbl_user` (`username`, `password`, `email`) VALUES ('test', 'test', 'test@test.com') ";
            $this->command = $this->connection->createCommand($sqlStatement);
            return $this->command->execute();
        }

    有几点注意的地方:

    1,与DAO方式结果区别是:DAO方式 数组中的每一个元素仍是数组。而通过CDbCriteria方式,数组中的元素是对象。

    2,即使该功能很强大,仍有一些需求不能满足,此时仍需sql语句。比如select avg(num) amount from ****。

    3,打印运行后的结果,可更深入yii这么做是如何实现的

    以上就是yii2中dao和ar区别的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:yii2
    上一篇:yii2 cookie取不到的原因 下一篇:yii2 session怎么用
    大前端线上培训班

    相关文章推荐

    • 如何解决Yii2针对游客和用户防范规则和限制• Yii2中场景的简单使用• yii2实现 关于在页面中"上一页,下一也" 的代码• 关于Yii2中使用join和joinwith进行多表关联查询

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网