$criteria = new CDbCriteria;
$criteria->addCondition("id=1"); //查询条件,即where id = 1
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%'
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4
$criteria->compare('id', 1); //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
//即如果第二个参数是数组就会调用addInCondition
$criteria->addCondition("id = :id");
$criteria->params[':id']=1;
//一些public vars
$criteria->select = 'id,parentid,name'; //代表了要查询的字段,默认select='*';
$criteria->join = 'xxx'; //连接表
$criteria->with = 'xxx'; //调用relations
$criteria->limit = 10; //取1条数据,如果小于0,则不作处理
$criteria->offset = 1; //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件
$criteria->group = 'group 条件'; $criteria->having = 'having 条件 ';
$criteria->distinct = FALSE; //是否唯一查询
posted @
2012-01-13 09:51 小果子 阅读(380) |
评论 (0) |
编辑 收藏
-
目录
一、增删查改
二、验证规则
三、事务管理
四、名字空间。参考:Yii数据库操作——名字空间(named scopes)的三种用法
一、增删查改
1,创建
$post = new Post;
$post->title = "";
$post->content = "";
$post->created_at = "CDbExpression('NOW()')";
$post->save();
(1) 插入后可立即获得主键id。
$id = $post->id; // 前提是auto_increment
(2) 某一个字段的值为缺省值时,可以在models/Class.php中修改
Class Post extends CActiveRecord{
public $title = 'new title';
$post = new Post;
echo $post->title; // 输出是: new title
}
(3) 使用CDbExpression
$post->create_time = new CDbExpression('NOW()');
2,查询【待补充】
(1) 通过主键查询
find("postID=:postID", array(':postID' => postID)
findByPk($id) // 单主键
(2) 通过非主键查询
find("postID=:postID", array(':postID' => postID)
findAll( id = $id )
findAll( id IN ( $id ) )
3,更新【待补充】
先find,并将对应字段赋新值,再保存
可以通过CActiveRecord::isNewRecord来判断是新建,还是更新。
4,删除
(1) 如果是一条记录
先找到后删除
$post=Post::model->findByPk(10);
$post->delete();
直接通过主键删除(类级别删除,不需要先载入记录)
Post::model->deleteByPk(10);
(2) 如果是多条记录(类级别删除,不需要先载入记录)
Post::model->deleteAll();
二、验证规则
验证规则(Data validation)发生在调用save()方法的时候。验证是基于在rules()方法中的定义。
if( $post->save() ){
// 验证通过
} else {
// 验证失败。通过getErrors()返回错误信息。
}
获取用户从表单提交的数据
$post->title = $_POST['title'];
$post->content = $_POST['content'];
$post->save();
如果多了,可以通过下面的方式减轻(alleviate)复杂程度:
- $post->attributes = $_POST['Post'];
- $post->save();
- //类似于:
- foreach($_POST['Post'] as $name=>$value){
- if($name is a safe attribute)
- $model->$name = $value;
- }
$post->attributes = $_POST['Post'];$post->save();//类似于:foreach($_POST['Post'] as $name=>$value){ if($name is a safe attribute) $model->$name = $value;}
注意:里面的验证检验非常重要,否则用户可能绕过授权。
三、事务管理
dbConnection是CDbConnection的实例
官方文档
- $model = Post::model();
- $transaction = $model->dbConnection->beginTransaction();
- try{
- $post = $model->findByPk(10);
- $post->title = 'new post title';
- $post->save();
- $transaction->commit();
- } catch (Exception $e){
- $transaction->rollback();
- }
$model = Post::model();$transaction = $model->dbConnection->beginTransaction();try{ $post = $model->findByPk(10); $post->title = 'new post title'; $post->save(); $transaction->commit();} catch (Exception $e){ $transaction->rollback();}
实际项目
- $trans = Yii::app()->db->beginTransaction();
- try {
- $manufacturer = new Manufacturer();
- $manufacturer->name = $name;
- $manufacturer->email = $email;
- $manufacturer->save();
- $trans->commit();
- } catch (Exception $e) {
- $trans->rollback();
- $this->response(array('status' => 1, 'msg' => $e->getMessage()));
- }
$trans = Yii::app()->db->beginTransaction();try { $manufacturer = new Manufacturer(); $manufacturer->name = $name; $manufacturer->email = $email; $manufacturer->save(); $trans->commit();} catch (Exception $e) { $trans->rollback(); $this->response(array('status' => 1, 'msg' => $e->getMessage())); }
其实使用的时候跟凡客体的我是凡客或淘宝体的亲一样。
注:Yii::app()后面的db在../config/main.php中已配置
- 'components'=>array(
- 'user'=>array('allowAutoLogin'=>true,),
- 'db'=>array("数据库连接参数"),
- )
posted @
2012-01-04 16:18 小果子 阅读(816) |
评论 (0) |
编辑 收藏
摘要: 一、查询数据集合
1、$admin=Admin::model()->findAll($condition,$params);
该方法是根据一个条件查询一个集合,如: findAll("username=:name",array(":name"=>$username)); 2、$admin=Admin::mod...
阅读全文
posted @
2012-01-04 16:06 小果子 阅读(2486) |
评论 (1) |
编辑 收藏
如果一切按计划进行,红帽(Red Hat)将成为第一家年收入超过10亿美元的开源软件厂商。这对于开源软件社区将是一个转折点。开源软件社区一直认为他们基于社区的开发方法是可行的、甚至是优越的、可替代传统的软件的开发方式。
红帽CEO吉姆·怀特赫斯特(Jim Whitehurst)称,我认为,我们将看到产生技术创新的地方将发生一个根本的转变,从几家软件公司的实验室转向庞大的开源软件的努力。
随着Linux、Apache Web server、Perl、Apache、Hadoop、OpenOffice、GIMP和几十个其它的开源软件计划给商业性软件带来更大的压力,开源软件在过去的几年里肯定给专有软件世界带来了混乱。但是,明天的开源软件的重量级产品是什么?下面是在2012年需要密切关注的五个项目。这些项目可能构成新的业务和新的行业的基础。这些项目也可能是仅仅因为能够更容易地或者更廉价地完成任务而受到了开发者和管理者的关注。
1.Nginx
在过去10年的大部分时间里,Web服务器软件的选择一直是稳定的。Apache一直在大多数Web服务器上应用,而微软的IIS(互联网信息服务)用于许多其它的服务器。然而,在过去的几年里,第三个进入这个市场的Nginx的应用一直在增长,因为这个软件能够轻松处理高容量的通讯。
据Nginx软件开发人员预测,Nginx目前已经在5000万个不同的互联网域名上运行,大约占整个互联网的10%。Nginx特别广泛地应用于通讯量非常大的网站,如Facebook、Zappos、Groupon、Hulu、Dropbox和WordPress。毫不奇怪,这个软件的创建者伊戈尔·西索夫(Igor Sysoev)在2004年设计Nginx软件的时候就是专门为处理大量同时使用网络的用户设计的,每台服务器最多有1万个连接。该公司共同创始人安德鲁·阿莱克谢耶夫(Andrew Alexeev)称,这是一个非常精细的架构。Nginx公司提供商业版本的Nginx软件。
即将到来的一年将是Nginx的一个好年景。Nginx去年从一些风险投资公司那里获得了300万美元,其中包括戴尔CEO迈克尔·戴尔(Michael Dell)支持的风险投资公司。Nginx与Jet-Stream合作为软件厂商的CDN(内容交付网络)软件包提供Nginx软件。该公司还与亚马逊合作为AWS(亚马逊Web服务)云服务优化Nginx软件。
除了用于大型网站运营之外,阿莱克谢耶夫预计Nginx将更广泛地用于新兴的云计算和共享的服务市场。他说,预计在明年推出的Nginx软件的下一个重要的发布版将更适合共享的托管环境。这个软件将能够更好地应对分布式拒绝服务攻击并且将配置额外的安全功能。
2.OpenStack
OpenStack项目进入云计算领域的时间比较晚。但是,这个项目有一个不可缺少的功能:可伸缩性。
OpenStack项目政策委员会主席乔纳森·布赖斯(Jonathan Bryce)称,我们正在谈论使用OpenStack运行一个拥有100台服务器或者1000台服务器的云。那里的其它选择确实没有考虑到这个规模。
自从2010年推出以来,OpenStack迅速赢得了惠普、英特尔和戴尔等云计算领域的IT公司的支持。OpenStack的贡献者喜欢把自己的工作称作增长速度最快的开源软件项目,参加者包括144家公司和2100多人。戴尔推出一个名为戴尔OpenStack云解决方案的软件包,把OpenStack与戴尔自己的服务器和软件结合在了一起。惠普也推出一个采用这个技术的测试版的公共云服务。
OpenStack的核心的计算组件是在美国航天局艾姆斯研究中心(Ames Research Center)为存储大量空间图片的一个内部云开发的。据曾经负责开发OpenStack云控制器前艾姆斯研究中心CIO克里斯·坎普(Chris Kemp)称,美国航天局管理人员原来试图使用Eucalyptus软件项目平台,但是,发现这个软件很难升级到需要的水平。
管理的托管提供商Rackspace的首席技术官约翰·安格斯(John Engates)说,为了帮助更广泛地应用,OpenStack正在配置许多新的功能,使这个软件更适合企业应用。一个名为“Keystone”的项目允许机构把OpenStack与自己的身份管理系统结合起来,或者与基于微软主动目录或者其它LDAP(轻型目录访问协议)的身份管理系统结合起来。此外,开发人员也正在为这个软件开发一个前端门户。Rackspace还将把这个项目剥离为一个完全独立的实体,希望它成为更多的云提供商的一个诱人的选择。
安格斯称,2011年将是这个产品打基础的一年。但是,我认为,2012年我们将真正开始利用这个基础在许多私有云和公共云中使用。
3.Stig
过去的一年是Cassandra、MongoDB、CouchDB和无数其它非关系数据库的应用显著增长的一年。但是,在9月份举行的“NoSQL Now”会议上,人们更多谈论的是尚未发布的数据存储Stig。如果幸运的话,我们将在2012年看到Stig。
Stig的维护者称,Stig是为社交网络网站的独特的工作量设计的。Stig是社交网络网站Tagged的软件工程师杰森·卢卡斯(Jason Lucas)创建的。他把这个技术称作分布式图表数据库。Stig旨在支持大量互动的和社交网络应用。这个数据商店的架构允许进行推论性的搜索,允许用户和应用程序查找信息的不同部分的联系。由于Stig是用Haskell功能编程语言编写的,它能够轻松地把自己的工作量分散到多台服务器。
Stig仍然有一些神秘感,因为它到目前为止还没有发布。但是,观察人士预测,它适合社交网络和其它保持广泛的数据的应用。卢卡斯解释说,社交网络的需求从一开始就与其它类型的工作不同,因此将受益于适合它需求的数据库。如果不能升级到行星的规模,你在这个领域就不能成为一个相关的服务。
Stig目前在Tagged网站的一台服务器上运行,不过,该公司预计将把Stig扩大应用为该公司唯一的数据库。开发人员原计划在12月开放这个软件的源代码,但是,后来推迟到2012年的某个时候。
咨询公司Kelly-McCreary & Associates的语义解决方案设计师丹·麦克里(Dan McCreary)说,我看到的情况是非常有趣的。他赞扬这个数据库的功能语言架构。这个架构将使这个数据库在多台服务器上部署更方便。
4.Linux Mint
尽管开源软件支持者的多年宣传,Linux从来没有广泛应用于台式电脑。但是,一直有一个用户友好的Linux发布版作为替代微软Windows的软件在使用。在最近几年,Canonical公司的Ubuntu已经完成了自己的任务,尽管日益流行的Linux Min也许会因为更容易使用而超过Ubuntu。
软件工程师克莱门特·勒费布尔(Clement Lefebvre)在评估了在线论坛中的各种Linux发布版之后首先创建了Linux Mint。勒费布尔在这个工作中产生了在这个理想的发布版中应该有什么功能的想法。就像Canonical为自己非常流行的Ubuntu感谢Debian Linux发布版一样,勒费布尔把Ubuntu作为Linux Mint的基础。现在,Linux Mint项目得到了捐献者的资金、自己网站的广告收入和来自用户搜索的收入。最后一项收入是通过与DuckDuckGo建立的一个有争议的合作实现的。
Linux Mint是仅需要桌面操作系统而不想了解更多的Linux工作原理的用户设计的。这个方法使安装和运行这个软件非常容易,维护也不成问题。更胜过Ubuntu的是,Linux Mint强调轻松的使用性,在新功能证明自己值得使用之前,一般不使用新的功能。
例如,Linux Mint避开有些争议的“Unity”桌面界面。Canonical应用这个界面更轻松地把Ubuntu移植到移动平台。相反,Linux Mint坚持使用更知名的和更成熟的Gnome界面。
事实上,由于Ubuntu的伤害,这种严格坚持可用性的做法也许有助于Linux Mint。Linux Mint称它的操作系统是全球排名第四位的桌面操作系统,仅次于Windows、苹果Mac和Ubuntu。在过去的一年里,Linux Mint在DistroWatch Linux新闻网站产生的网页浏览量甚至超过了Ubuntu。这个指标反映了Linux发布版的流行程度。毫无疑问,2012年将看到Linux Mint更多的增长。
5. Gluster
红帽能够给存储软件领域带来它曾给Unix操作系统市场带来的那种革命性的变化吗?今年10月,红帽收购了开源软件公司Gluster。这家公司制作的开源软件GlusterFS且文件系统能够把商品化SATA(串行高级技术附件)硬盘和NAS(网络附加存储)系统连接到大规模的可伸缩的存储池。红帽计划使用它占领Linux操作系统市场的方法统治存储领域。
据红帽CEO吉姆·怀特赫斯特称,存储软件市场每年收入达40亿美元,不过,这不是红帽对这个技术感兴趣的原因。相反,红帽感兴趣的是找到一种能够使云迁移更方便的存储技术。他说,我们寻找一些开源软件能够作为更强大的技术创新的方式的地方。我们正在寻找一些能够盈利的地方。在这方面,还没有其它的解决方案。
这个软件已经有一些增长势头,至少在管理员下载和测试这个软件方面是如此。在过去的一年里,GlusterFS的下载量增长了300%。在今年11月,这个软件的下载次数超过了3.7万次。
posted @
2012-01-04 15:47 小果子 阅读(757) |
评论 (0) |
编辑 收藏
posted @
2011-12-23 10:30 小果子 阅读(215) |
评论 (0) |
编辑 收藏