让ar执行queryall和queryrow方法返回数组

<?php
namespace common\components;
use \CActiveRecord;
use \Yii;
use \CDbConnection;
use \CDbException;
use common\helpers\ConnectionHelper;

class DBActiveRecord extends CActiveRecord{

public static $_dbConnections = array();
    
    /**
     * @return 数据配置组
     */
    public static function dbActiveGroup()
    {
        return get_called_class();
    }
    
    public static function model($className=__CLASS__)
    {
        if ($className === __CLASS__ )
        {
            $className = get_called_class();
        }
    
        return parent::model($className);
    }
    
    /**
     * 重写了 CActiveRecord的获取数据库连接,默认从公共配置里面读取连接配置
     *
     * @return CDbConnection the database connection used by active record.
     */
    function getDbConnection()
    {
        $activeGroup = $this->dbActiveGroup();
        if(isset(self::$_dbConnections[$activeGroup]))
        {
            return self::$_dbConnections[$activeGroup];
        }
        else
        {
            $dbConnection = ConnectionHelper::get($activeGroup);
            if( ! empty($dbConnection) && $dbConnection instanceof CDbConnection)
            {
                self::$_dbConnections[$activeGroup] = $dbConnection;
                return $dbConnection;
            }
            else
            {
                throw new CDbException(Yii::t('yii','Active Record requires a "'.$activeGroup.'" CDbConnection application component.'));
            }
        }
    }
    
    /**
     * 获取数据库连接,静态方法
     *
     * @return 数据连接
     */
    public static function getDb()
    {
        $className = get_called_class();
        return ConnectionHelper::get($className::dbActiveGroup());
    }
    
    /**
     * 执行数据库function
     *
     * @return 执行结果
     */
    public static function callFunction($mysqlFunction, array $params=array())
    {
        $className = get_called_class();
        $connection = $className::getDb();
        switch ($connection->driverName)
        {
            case 'mysql':
                return ConnectionHelper::callMysqlFunction($connection, $mysqlFunction, $params);
                break;
            default:
                break;
        }
        return FALSE;
    }
    
    /**
     * 执行存储过程
     *
     * @return 执行结果
     */
    public static function callProcedure($mysqlProcedure, array $params=array())
    {
        $className = get_called_class();
        $connection = $className::getDb();
        switch ($connection->driverName)
        {
            case 'mysql':
                return ConnectionHelper::callMysqlProcedure($className::getDb(), $mysqlProcedure, $params);
                break;
            default:
                break;
        }
        return FALSE;
    }
    
    /**
     * 获取字段rawName加表别名前缀,主要联表时候防止where条件中字段冲突用的
     * @param string $columnName
     * @return string
     */
    public function getColumnRawName($columnName)
    {
        $prefix = $this->getTableAlias(true) . '.';
        $columns = $this->tableSchema->columns;
        if (isset($columns[$columnName]))
        {
            return $prefix.$columns[$columnName]->rawName;
        }
        else
        {
            return $columnName;
        }
    }
    
    /**
     *
     * @param mixed $criteria
     */
    public function queryAll($criteria = NULL)
    {
        if ( ! empty($criteria))
        {
            $this->getDbCriteria()->mergeWith($criteria);
        }
        
        $result = $this->getCommandBuilder()
            ->createFindCommand($this->tableSchema, $this->getDbCriteria())
            ->queryAll();
        
        $this->setDbCriteria(NULL);
        
        return $result;
    }
    
    public function queryRow($criteria = NULL)
    {
        if ($criteria != NULL)
        {
            $this->getDbCriteria()->mergeWith($criteria);
        }
        
        $result = $this->getCommandBuilder()
            ->createFindCommand($this->tableSchema, $this->getDbCriteria())
            ->queryRow();
        
        $this->setDbCriteria(NULL);
        
        return $result;
    }
    
    public function compare($column, $value, $partialMatch = FALSE, $operator = 'AND')
    {
        $criteria = new \CDbCriteria;
        $column = $this->getColumnRawName($column);
        
        if ($value === array())
        {
            $criteria->condition = "1 = 0";
        }
        else if ($value === '')
        {
            $criteria->condition = $column." = ''";
        }
        else
        {
            $criteria->compare($column, $value, $partialMatch, $operator, TRUE);
        }
        
        $this->getDbCriteria()->mergeWith($criteria);
        
        return $this;
    }
    
    
}

让ar执行queryall和queryrow方法返回数组的更多相关文章

  1. 083、Java数组之方法返回数组

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  2. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  3. JS 数组方法 array数组声明 元素的添加和删除 等

    声明数组 var arr1 = [1,2,3,4,5]; var arr2 = new Array(100); //声明长度为100的arr2数组. arr2=[]; arr2.length = 10 ...

  4. C#线程池ThreadPool.QueueUserWorkItem接收线程执行的方法返回值

    最近在项目中需要用到多线程,考虑了一番,选择了ThreadPool,我的需求是要拿到线程执行方法的返回值, 但是ThreadPool.QueueUserWorkItem的回调方法默认是没有返回值的,搜 ...

  5. 在IE浏览器中执行OpenFlashChart的reload方法时无法刷新的解决方法

    由于项目需求,需要在网页上利用图表展示相关数据的统计信息,采用了OpenFlashChart技术.OpenFlashChart是一款开源的以Flash和Javascript为技术基础的免费图表,用它能 ...

  6. EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand

    前言 在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand:在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery ...

  7. 通过反射执行get、set方法

    Class clazz = sourceObj.getClass(); 1.获取所有属性 BeanInfo beanInfo = Introspector.getBeanInfo(clazz); Pr ...

  8. 如何循环遍历document.querySelectorAll()方法返回的结果

    使用JavaScript的forEach方法,我们可以轻松的循环一个数组,但如果你认为document.querySelectorAll()方法返回的应该是个数组,而使用forEach循环它: /* ...

  9. 是否需要手动执行DataContext的Dispose方法?

    我们知道DataContext实现了IDisposable接口.在C#中,凡是实现了IDisposable接口的类,都推荐的使用using语句.如下: using (DataContext db = ...

随机推荐

  1. POJ 1019 Number Sequence

    找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...

  2. ThinkPHP魔术方法

    我们在使用thinkphp开发系统的时候,有时候会用到getById('1')这个方法快速的获取一条信息的内容,比用where(" id =1 ")->find();好用多了 ...

  3. 2.交通聚类 -层次聚类(agnes)Java实现

    1.项目背景 在做交通路线分析的时候,客户需要找出车辆的行车规律,我们将车辆每天的行车路线当做一个数据样本,总共有365天或是更多,从这些数据中通过聚类来获得行车路线规律统计分析. 我首先想到是K-m ...

  4. loadrunner 学习笔记--AJAX(转)

    用loadrunner测试WEB程序的时候总是会碰到AJAX或者ActiveX实现的功能,而通常这些功能会包含很多客户端函数(一般为JavaScript).我们该如何处理?如果从功能实现的角度去考虑这 ...

  5. C# switch

    要开学了(啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊) 做个沉默的行动者吧!(嘘嘘嘘嘘嘘嘘)今天去水题发现好多基础都不知道啊 1.   switch(控制语句) { case 常量表达式:{statement ...

  6. Gunicorn 问题

    Does Gunicorn suffer from the thundering herd problem? The thundering herd problem occurs when many ...

  7. jQuery获取页面及个元素高度、宽度

    获取浏览器显示区域(可视区域)的高度 :    $(window).height();      获取浏览器显示区域(可视区域)的宽度 : $(window).width();     获取页面的文档 ...

  8. ios 异常捕获

    @try { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate c ...

  9. Cocos2d-x3.3RC0 Cpp-test分析之NewAudioEngineDemo(转:http://blog.csdn.net/yuxikuo_1/article/details/41081453)

    #ifndef __NewAudioEngineDemo__NewAudioEngineDemo__#define __NewAudioEngineDemo__NewAudioEngineDemo__ ...

  10. 顺序栈的c++实现及利用其实现括号的匹配

    #include<iostream>#include<cassert>#include<cstring>#include<string>using na ...