让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. ajax浅析---ScriptManager

    使用ScriptManager控件 它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAX ...

  2. css小常识

    static:对象遵循常规流.此时4个定位偏移属性不会被应用(即 没有声明position:relative, top.right.bottom.left不管用). 当position的值为非stat ...

  3. Effective Java 读书笔记之八 异常

    一.只针对异常的情况才使用异常 1.类具有状态相关的方法时,可采用状态测试方法和可识别的返回值两个策略. 二.对可恢复的情况使用受检异常,对编程错误使用运行时异常 1.期望调用者能够适当恢复的情况,应 ...

  4. Codeforces Round #288 (Div. 2) E. Arthur and Brackets

    题目链接:http://codeforces.com/contest/508/problem/E 输入一个n,表示有这么多对括号,然后有n行,每行输入一个区间,第i行的区间表示从前往后第i对括号的左括 ...

  5. 热更新脚本C#light,ulua,Scorpio性能比较

    http://www.unity蛮牛.com/thread-32861-1-1.html 测试环境: unity4.5.2  三个脚本全是源码导入  PC :处理器 Intel(R) Core(TM) ...

  6. Unity路径规划

    Unity路径规划  转自:http://www.cnblogs.com/zsb517/p/4090629.html 背景 酷跑游戏中涉及到弯道.不规则道路. 找来一些酷跑游戏的案例来看,很多都是只有 ...

  7. 专业版Unity技巧分享:使用定制资源配置文件

    http://unity3d.9tech.cn/news/2014/0116/39639.html 通常,在游戏的开发过程中,最终会建立起一些组件,通过某种形式的配置文件接收一些数据.这些可能是程序级 ...

  8. leetcode 33. Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  9. Android学习笔记(十)——ListView的使用(上)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! ListView绝对可以称得上是 Android中最常用的控件之一,ListView允许用户通过手指上下滑动的 ...

  10. python os.path.dirname 是什么目录

    这个获取文件路径中所在的目录. 1 2 3 4 5 6 7 In [1]: import os   In [2]: os.__file__ Out[2]: '/usr/lib/python2.7/os ...