Yii 关于 find findAll 查找出制定的字段的方法

总所周知

modelName::model() -> find()    //找出的是一个对象
modelName::model() -> findALL()  //找出的是一个对象集合的数组

如何找出我所需要的字段的数据,而不是全部字段的数据

之前我是这么做的

$criteria = new CDbCriteria;
$criteria->select = ‘username,id,email‘;
$criteria->order = ‘id DESC‘;
$users = modelName::model()->findAll( $criteria );

后台无意中看到别人有这么写的,发现自己是多么的无知

$users = modelName::model()->findAll(array(
    ‘select‘ =>array(‘username‘,‘id‘,‘email‘),
    ‘order‘ => ‘id DESC‘,
));

测试后发现果然可以用,那么find也可以这么操作

$user = modelName::model()->find(array(
    ‘select‘ =>array(‘username‘,‘id‘,‘email‘),
    ‘order‘ => ‘id DESC‘,
    ‘condition‘ => ‘id=‘.$id,
));

当然了,这么做肯定不安全了,换成下面的方法同样可以

$users = $this->user->find(array(
    ‘select‘=>array(‘id‘,‘username‘,‘email‘),
    ‘order‘ => ‘id DESC‘,
    ‘condition‘ => ‘state=:state AND id=:id‘,
    ‘params‘ => array(‘:state‘=>‘1‘,‘:id‘ => ‘2‘),
));

同理用findAll测试了也可以,结论

通过这种方法能够很方便的获取所需要的数据,当然需要分页的时候还是 需要 new 以下 CDbCriteria 的

时间: 2024-10-11 23:22:25

Yii 关于 find findAll 查找出制定的字段的方法的相关文章

Yii使用find findAll查找出指定字段的实现方法

Yii使用find findAll查找出指定字段的实现方法,非常实用的技巧,需要的朋友可以参考下. 用过Yii的朋友都知道,采用如下方法: 查看代码 打印 1 modelName::model()->find() //找出的是一个对象 2 modelName::model()->findALL() //找出的是一个对象集合的数组 可以找出对象与对象集合的数组,那么如何找出我所需要的字段的数据,而不是全部字段的数据呢?之前我是这么做的: 查看代码 打印 1 $criteria=new CDbCr

veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象

veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象 续接:<veridata实验举例(2)验证表BONUS与表SALGRADE两节点同步情况>,地址:点击打开链接 环境: Item Source System Target System Platform Red Hat Enterprise Linux Server release 5.4 Red Hat Enterprise Linux Server release 5.4 Hostname gc1 g

从海量数据中查找出前k个最小或最大值的算法(java)

现在有这么一道题目:要求从多个的数据中查找出前K个最小或最大值 分析:有多种方案可以实现.一.最容易想到的是先对数据快速排序,然后输出前k个数字.   二.先定义容量为k的数组,从源数据中取出前k个填充此数组,调整此数组的最大值maxValue到首位,然后对剩下的n-k个数据迭代,对于每个遍历到的数字x,如果x < maxValue,用x把maxValue替换掉,然后调整数组最大值的位置. 三.基于二的思路,维护容量为k的堆,从源数据中取出前k个填充实例化堆,调整此堆中的最大值maxValue到

veridata实验举例(4)验证veridata查找出updata、delete操作导致的不同步现象

veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象 续接:<veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象>,地址:点击打开链接 环境: Item Source System Target System Platform Red Hat Enterprise Linux Server release 5.4 Red Hat Enterprise Linux Server release 5.4 Hos

查找出/tmp目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件

查找出/tmp目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件. 答:生成环境 [[email protected] tmp]# date -s "20170501" Mon May  1 00:00:00 CST 2017 [[email protected] tmp]# dd if=/dev/zero of=1.log bs=60KB count=1 1+0 records in 1+0 records out 60000 bytes (60 kB) co

C#:比较二个字符串,查找出相同字数和差异字符

/// <summary>        /// 比较二个字符串,查找出相同字数和差异字符        /// </summary>        /// <param name="s1"></param>        /// <param name="s2"></param>        /// <returns></returns>        public 

用Python遍历(Linux)的子目录并且查找出指定的字符串带(扩展名)黑白名单功能

<软件&网站架构师手记>之一_用Python脚本补充Linux命令的不完善之二: 用Python脚本遍历(Linux)的子目录(或文件夹)并且查找出指定的字符串,并且显示: 1.目录位置: 2.(字符串)所在的文件名: 3.字符串所在(文件中)的行号; 4.以及显示本行信息,既显示本行的(从本行开始)的256个字符. #并且支持把扩展名放进脚本中 用数组存放的黑.白(扩展名)名单中: 既先在"白扩展名"类型的文件当中:检索,如*.txt, *.log, *.cnf,

输入一个字符串,查找出出现次数最多的字符

.输入一个字符串,查找出出现次数最多的字符 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 4 System.out.println("请输入一个字符串:"); 5 String str = new Scanner(System.in).next(); 6 int[] a = new int[127]; 7 char maxChar = 0; 8 int max = 0;

面试题之在字符串中查找出第一个只出现一次的字符的位置

样例:比如“abcdabc”,第一个只出现一次的字符为d,位置为3 解决方案1:O(n*n)的复杂度 遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符相同的字符.则当前字符为第一个 只出现一次的字符. 解决方案2:O(n)的复杂度 采取空间换时间的策略 开一个辅助数组,做哈希映射 第一次扫描时,更新在辅助数组中当前字符出现的次数. hash查找的时间复杂度为o(1). 第二次扫描时,在辅助数组中通过查辅助数组看当前字符是否只出现了一次,从头到尾的顺序遍历保证了“第一