目录
Yii基于数组和对象的Model查询技巧实例详解,yiimodel
您可能感兴趣的文章:
首页 后端开发 php教程 Yii基于数组和对象的Model查询技巧实例详解,yiimodel_PHP教程

Yii基于数组和对象的Model查询技巧实例详解,yiimodel_PHP教程

Jul 12, 2016 am 09:02 AM
model yii 查询

Yii基于数组和对象的Model查询技巧实例详解,yiimodel

本文实例讲述了Yii基于数组和对象的Model查询技巧。分享给大家供大家参考,具体如下:

对于一个Model Post 有如下的4中查询方法,返回对象或者对象数组。

//查找满足指定条件的结果中的第一行 find the first row satisfying the specified condition
$post=Post::model()->find($condition,$params);
//查找具有指定主键值的那一行 find the row with the specified primary key
$post=Post::model()->findByPk($postID,$condition,$params);
//查找具有指定属性值的行 find the row with the specified attribute values
$post=Post::model()->findByAttributes($attributes,$condition,$params);//未找到返回null
//通过指定的SQL 语句查找结果中的第一行 find the first row using the specified SQL statement
$post=Post::model()->findBySql($sql,$params);

登录后复制

如果find 方法找到了一个满足查询条件的行,它将返回一个Post 实例,实例的属性含有数据表行中相应列的值。然后我们就可以像读取普通对象的属性那样读取载入的值,例如echo $post->title;。如果使用给定的查询条件在数据库中没有找到任何东西, find 方法将返回null。

调用find 时,我们使用$condition 和$params 指定查询条件。此处$condition 可以是SQL 语句中的WHERE 字符串,$params 则是一个参数数组,其中的值应绑定到$condation 中的占位符。例如:假设我们查询postID = 10的数据

// find the row with postID=10
$post=Post::model()->find('postID=:postID', array(':postID'=>10));

登录后复制

条件$condition 就是我们sql里的where部分,那参数怎么办呢,通过params传递,不过名字是加了":"的。

YII有个CDbCriteria类来构造查询,如果我们查询postId为10的title,CdbCriteria是这样构造的

$criteria=new CDbCriteria;
$criteria->select='title'; // only select the 'title' column
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params is not needed

登录后复制

一种替代CDbCriteria 的方法是给find 方法传递一个数组。数组的键和值各自对应标准( criterion)的属性名和值,上面的例子可以重写为如下:

$post=Post::model()->find(array(
  'select'=>'title',
  'condition'=>'postID=:postID',
  'params'=>array(':postID'=>10),
));

登录后复制

当然也适用于findAll()

self::$_items[$type]=array();
$models=self::model()->findAll(array(
  'condition'=>'type=:type',
  'params'=>array(':type'=>$type),
  'order'=>'position',
));

登录后复制

当一个查询条件是关于按指定的值匹配几个列时,我们可以使用findByAttributes()。我们使$attributes 参数是一个以列名做索引的值的数组。
findByAttributes 里的$attributes就是字段的名字.查询title为abc怎么查询呢?见下面
复制代码 代码如下:Post::model()->findByAttributes(array('title'=>'abc'))

其它方法:

1、$admin=Admin::model()->findAll($condition,$params);

该方法是根据一个条件查询一个集合,如:
复制代码 代码如下:findAll("username=:name",array(":name"=>$username));
2、$admin=Admin::model()->findAllByPk($postIDs,$condition,$params);
findAllByPk($id,"name like ':name' and age=:age" ,array(':name'=>$name,'age'=>$age));
该方法是根据主键查询一个集合,可以使用多个主键,如:
复制代码 代码如下:findAllByPk(array(1,2));
3、$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params);

该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,如:
复制代码 代码如下:findAllByAttributes(array('username'=>'admin'));
4、$admin=Admin::model()->findAllBySql($sql,$params);

该方法是根据SQL语句查询一个数组,如:
复制代码 代码如下:findAllBySql("select *from admin where username=:name",array(':name'=>'admin'));

二、查询对像的方法

1、$admin=Admin::model()->findByPk($postID,$condition,$params);

根据主键查询出一个对象,如:复制代码 代码如下:findByPk(1);
2、$row=Admin::model()->find($condition,$params);

根据一个条件查询出一组数据,可能是多个,但是他只返回第一行数据,如:
复制代码 代码如下:find('username=:name',array(':name'=>'admin'));
3、$admin=Admin::model()->findByAttributes($attributes,$condition,$params);

该方法是根据条件查询一组数据,可以是多个条件,把条件放到数组里面,他查询的也是第一条数据,如:
复制代码 代码如下:findByAttributes(array('username'=>'admin'));
4、$admin=Admin::model()->findBySql($sql,$params);

该方法是根据SQL语句查询一组数据,他查询的也是第一条数据,如:
复制代码 代码如下:findBySql("select *from admin where username=:name",array(':name'=>'admin'));
5、拼一个获得SQL的方法,在根据find查询出一个对象

$criteria=new CDbCriteria;
$criteria->select='username'; // only select the 'title' column
$criteria->condition='username=:username';
$criteria->params=array(':username=>'admin');
$post=Post::model()->find($criteria); // $params is not needed

登录后复制

三、查询个数,判断查询是否有结果

1、$n=Post::model()->count($condition,$params);

该方法是根据一个条件查询一个集合有多少条记录,返回一个int型数字,如
复制代码 代码如下:count("username=:name",array(":name"=>$username));
2、$n=Post::model()->countBySql($sql,$params);

该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如
复制代码 代码如下:countBySql("select *from admin where username=:name",array(':name'=>'admin'));
3、$exists=Post::model()->exists($condition,$params);
该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到

四、添加的方法

$admin=new Admin;
$admin->username=$username;
$admin->password=$password;
if($admin->save()>0){
  echo "添加成功";
}else{
  echo "添加失败";
}

登录后复制

五、修改的方法

1、Post::model()->updateAll($attributes,$condition,$params);

$count = Admin::model()->updateAll(array('username'=>'11111','password'=>'11111'),'password=:pass',array(':pass'=>'1111a1'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}

登录后复制

2、Post::model()->updateByPk($pk,$attributes,$condition,$params);

$count = Admin::model()->updateByPk(1,array('username'=>'admin','password'=>'admin'));
$count = Admin::model()->updateByPk(array(1,2),array('username'=>'admin','password'=>'admin'),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}

登录后复制

$pk代表主键,可以是一个也可以是一个集合,$attributes代表是要修改的字段的集合,$condition代表条件,$params传入的值

3、Post::model()->updateCounters($counters,$condition,$params);

$count =Admin::model()->updateCounters(array('status'=>1),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "修改成功";
}else{
  echo "修改失败";
}

登录后复制

array('status'=>1)代表数据库中的admin表根据条件username='admin',查询出的所有结果status字段都自加1

六、删除的方法

1、Post::model()->deleteAll($condition,$params);

$count = Admin::model()->deleteAll('username=:name and password=:pass',array(':name'=>'admin',':pass'=>'admin'));
      $id=1,2,3
      deleteAll('id in(".$id.")');删除id为这些的数据
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}

登录后复制

2、Post::model()->deleteByPk($pk,$condition,$params);

$count = Admin::model()->deleteByPk(1);
$count = Admin::model()->deleteByPk(array(1,2),'username=:name',array(':name'=>'admin'));
if($count>0){
  echo "删除成功";
}else{
  echo "删除失败";
}

登录后复制

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
  • Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
  • YiiFramework入门知识点总结(图文教程)
  • PHP的Yii框架的常用日志操作总结
  • Yii学习总结之数据访问对象 (DAO)
  • Yii学习总结之安装配置
  • YII路径的用法总结
  • Yii使用技巧大汇总

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1085884.htmlTechArticleYii基于数组和对象的Model查询技巧实例详解,yiimodel 本文实例讲述了Yii基于数组和对象的Model查询技巧。分享给大家供大家参考,具体如下:...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

学信网如何查询自己的学历 学信网如何查询自己的学历 Mar 28, 2024 pm 04:31 PM

学信网如何查询自己的学历?在学信网中是可以查询到自己的学历,很多用户都不知道如何在学信网中查询到自己的学历,接下来就是小编为用户带来的学信网查询自己学历方法图文教程,感兴趣的用户快来一起看看吧!学信网使用教程学信网如何查询自己的学历一、学信网入口:https://www.chsi.com.cn/二、网站查询:第一步:点击上方学信网地址,进入首页点击【学历查询】;第二步:在最新的网页中点击如下图箭头所示的【查询】;第三步:之后在新页面点击【的登陆学信档案】;第四步:在登陆页面输入信息点击【登陆】;

12306怎么查询历史购票记录 查看历史购票记录的方法 12306怎么查询历史购票记录 查看历史购票记录的方法 Mar 28, 2024 pm 03:11 PM

  12306订票app下载最新版是一款大家非常满意的出行购票软件,想去哪里就去那里非常方便,软件内提供的票源非常多,只需要通过实名认证就能在线购票,所有用户的出行车票机票都可以轻松买到,享受不同的优惠折扣。还能提前开启预约抢票,预约酒店、专车接送都是可以的,有了它想去哪里就去那里一键购票,出行更加简单方便,让大家的出行体验更舒服,现在小编在线详细为12306用户们带来查看历史购票记录的方法。  1.打开铁路12306,点击右下角我的,点击我的订单  2.在订单页面点击已支付。  3.在已支付页

苹果手机怎么查询激活日期 苹果手机怎么查询激活日期 Mar 08, 2024 pm 04:07 PM

使用苹果手机想要查询激活日期,最好的方法是通过手机中的序列号来查询,也可以通过访问苹果的官网来进行查询,通过连接电脑查询,下载第三方软件查询。苹果手机怎么查询激活日期答:序列号查询,苹果官网查询,电脑查询,第三方软件查询1、用户最好的方式就是知道自己手机的序列号,打开设置通用关于本机就可以看到序列号。2、使用序列号不仅可以知道自己手机的激活日期,还可以查看手机版本,手机产地,手机出厂日期等。3、用户访问苹果的官网找到技术支持,找到页面底部的服务和维修栏目,里面查看iPhone的激活信息。4、用户

如何使用Oracle 查询表是否被锁? 如何使用Oracle 查询表是否被锁? Mar 06, 2024 am 11:54 AM

标题:如何使用Oracle查询表是否被锁?在Oracle数据库中,表锁是指当一个事务正在对表执行写操作时,其他事务想要对该表执行写操作或者对表进行结构改变(如增加列、删除行等)时会被阻塞。在实际开发过程中,我们经常需要查询表是否被锁,以便更好地排查和处理相关问题。本文将介绍如何使用Oracle语句查询表是否被锁,并给出具体的代码示例。要查询表是否被锁,我们

MySQL与PL/SQL的异同比较 MySQL与PL/SQL的异同比较 Mar 16, 2024 am 11:15 AM

MySQL与PL/SQL是两种不同的数据库管理系统,分别代表了关系型数据库和过程化语言的特点。本文将比较MySQL和PL/SQL的异同点,并附带具体的代码示例进行说明。MySQL是一种流行的关系型数据库管理系统,采用结构化查询语言(SQL)来管理和操作数据库。而PL/SQL是Oracle数据库特有的过程化语言,用于编写存储过程、触发器和函数等数据库对象。相同

如何查询通神币最新价格? 如何查询通神币最新价格? Mar 21, 2024 pm 02:46 PM

如何查询通神币最新价格?通神币是一种数字货币,可用于购买游戏内物品、服务和资产。它是去中心化的,意味着它不受政府或金融机构的控制。通神币的交易在区块链上进行,这是一个分布式账本,记录了所有通神币交易的信息。要查询通神币的最新价格,您可以使用以下步骤:选择一个可靠的价格查询网站或应用程序。一些常用的价格查询网站包括:CoinMarketCap:https://coinmarketcap.com/Coindesk:https://www.coindesk.com/币安:https://www.bin

Discuz数据库位置查询技巧分享 Discuz数据库位置查询技巧分享 Mar 10, 2024 pm 01:36 PM

论坛是互联网上非常常见的网站形式之一,它为用户提供了一个分享信息、交流讨论的平台。而Discuz是一款常用的论坛程序,相信很多站长都已经非常熟悉了。在进行Discuz论坛的开发和管理过程中,经常需要查询数据库中的数据来进行分析或处理。在这篇文章中,我们将分享一些查询Discuz数据库位置的技巧,并提供具体的代码示例。首先,我们需要了解Discuz的数据库结构

如何查询INJ币最新价格? 如何查询INJ币最新价格? Mar 06, 2024 pm 05:00 PM

查询INJ币最新价格INJ币是InjectiveProtocol开发的一种基于以太坊区块链的去中心化金融(DeFi)代币,旨在为衍生品交易提供高效、透明的平台。持有者可以使用INJ币支付交易费用、质押以获取奖励,并参与InjectiveProtocol的治理。INJ代币的发行总量有限,这使得它具有稀缺性和价值存储的潜力。InjectiveProtocol的愿景是通过INJ代币促进更广泛的金融包容性,并为用户提供开放、无边界的金融服务体验。INJ代币的使用不仅推动了DeFi行业的创新发展,还为用户

See all articles