资讯专栏INFORMATION COLUMN

Yii AR的使用

LiuRhoRamen / 1368人阅读

摘要:因为刚开始学习框架的时候使用的是,后来开始接触的时候各种不熟悉,只能是各种百度,因为自己英语很弱,花了不少时间。

因为刚开始学习php 框架的时候使用的是 CI,后来开始接触 Yii 的时候各种不熟悉,只能是各种百度,因为自己英语很弱,花了不少时间。

如果英文不错,可以直接看原文地址 http://www.yiiframework.com/doc/guide/1.1/en/database.ar

一、对于一个 Model News 有如下的很多种中查询方法,如下返回对象或者对象数组:
$post=News::model()->find($condition,$params);                         // 通过指定的条件进行查询
$post=News::model()->findByPk($postID,$condition,$params);             // 通过news表的primary key 进行查询
$post=News::model()->findByAttributes($attributes,$condition,$params); // 通过指定关键值继续查询
$post=News::model()->findBySql($sql,$params);                          // 通过sql语句进行查询

下面我们来看 find() 方法:
比如我们要查询 nid5的那条数据

$post=News::model()->find("nid=:newsID", array(":newsID"=>5));

条件 $condition 就是我们 sql 里的 where 部分,参数通过 params 传递, 注意名字前面是加了" : "的。

Yii中我们还可以使用CDbCriteria类来构造查询,如果我们查询nid5title值,CdbCriteria是这样构造的:

$criteria = new CDbCriteria;
$criteria->select="title";              // 只查询出相应的 title 字段,不要这句话讲返回整条数据
$criteria->condition="nid=:newsID";
$criteria->params=array(":newsID"=>5);
$news = News::model()->find($criteria); // $params不是必须的 

还有也可以写成一下方式:

$news = News::model()->find(array(
  "select"=>"title",
  "condition"=>"nid=:newsID",
  "params"=>array(":newsID"=>5),
)); 

下面我们来看 findByAttributes() 方法,返回一条记录:

News::model()->findByAttributes(array("title"=>"abc"));

参数就是一个键值对数组


还有其他的一些方法:

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

该方法是根据一个条件查询出集合,如:

findAll("username=:name",array(":name"=>$username));

通过主键查询:

$admin=Admin::model()->findAllByPk($postIDs,$condition,$params); 
findAllByPk($id,"name like ":name" and age=:age" ,array(":name"=>$name,"age"=>$age));

该方法是根据主键查询一个集合,可以使用多个主键,如: findAllByPk(array(1,2));


查询所有满足条件的集合:

$admin=Admin::model()->findAllByAttributes($attributes,$condition,$params); 

该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面,根据属性来查询,就像sqlwhere里的多个and如: findAllByAttributes(array("username"=>"admin"));

SELECT *  from one_table where username = "admin" and password ="123456";

对应的AR model查询如下

Admin::model()->findAllByAttributes(array("username"=>"admin", "password"=>"123456")); 

通过SQL语句查询所有满足条件的结果

$admin=Admin::model()->findAllBySql($sql,$params); 

该方法是根据SQL语句查询一个数组,如:

findAllBySql("select *from admin where username=:name",array(":name"=>"admin"));

通过SQL语句查询一条满足条件的结果

$admin=Admin::model()->findBySql($sql,$params); 

该方法是根据SQL语句查询一个数组,如:

findBySql("select *from admin where username=:name",array(":name"=>"admin"));
二、查询个数,判断查询是否有结果

1.该方法是根据条件查询一个集合有多少条记录,返回一个int型数字,如

$n=Post::model()->count($condition,$params);
count("username=:name",array(":name"=>$username));    

2、该方法是根据SQL语句查询一个集合有多少条记录,返回一个int型数字,如

$n=Post::model()->countBySql($sql,$params); 
countBySql("select *from admin where username=:name",array(":name"=>"admin")); 

3、该方法是根据一个条件查询查询得到的数组有没有数据,如果有数据返回一个true,否则没有找到:

$exists=Post::model()->exists($condition,$params);
三、添加的方法
$admin=new Admin;
$admin->username=$username;
$admin->password=$password;
if($admin->save()>0){
  echo "添加成功"; 
}else{
  echo "添加失败"; 
} 
四、修改的方法

1、updateAll()

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、updateByPk()

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、updateCounters()

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、deleteAll()

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、deleteByPk()

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 AR还有更多的简便操作,大家可以在使用中慢慢体会。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30260.html

相关文章

  • 使用YII 做开发总结

    摘要:也提供了命名查询的方式,比如需要获取最近一个月内发布的篇文章,如果经常性的用到这个查询,可以使用命名查询的方式来写。 这两天用YII开发了用户管理的功能,以前虽然也用YII框架开发过一些功能,但是总感觉对YII的使用还不是很熟练。 这次真正动手之前,先复习了一遍 yii-guide-1.1.14.pdf 这本书,上次看的时候太过于粗略了,这次仔仔细细的阅读了一遍。 说一下最直观的感受 ...

    mykurisu 评论0 收藏0
  • Yii修行之路 - Active Record 活动记录

    摘要:建立关联关系后,通过可以获取一个对象的数组,该数组代表当前客户对象的订单集。定义关联关系使用一个可以返回对象的方法,对象有关联上下文的相关信息,因此可以只查询关联数据。基于表外键定义关联关系是最佳方法。 简介 Yii 在操作数据库方面提供了一个十分强大的类库来支撑整个框架业务的运转,这就是 Active Record (活动记录,以下简称AR)。 基本概念 AR类提供了一个面向对象的接...

    HmyBmny 评论0 收藏0
  • yii过滤xss代码,防止sql注入教程

    摘要:好啦,我们看看在框架的不同版本中是怎么处理攻击,注入等问题的。那要是,又是怎样处理的喃考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导继续阅读 作者:白狼 出处:http://www.manks.top/yii2_filter_xss_code_or_safe_to_database.html 本文版权...

    Shonim 评论0 收藏0
  • php业务代码风格几个建议

    摘要:业务代码风格的几个建议关于循环体内重复调用的问题代码示例是一个可能超出个数据的大变量以上代码块是有非常严重问题的。所以,业务代码应尽量避免使用类似代码。建议每个方法的代码不超过行,除非情况特殊。 业务代码风格的几个建议 关于循环体内重复调用的问题 代码示例: // $array是一个可能超出1000个数据的大变量 foreach ($array as $ar) { $mod...

    tianyu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<