$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 小果子 閱讀(399) |
評論 (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 小果子 閱讀(835) |
評論 (0) |
編輯 收藏
摘要: 一、查詢數據集合
1、$admin=Admin::model()->findAll($condition,$params);
該方法是根據一個條件查詢一個集合,如: findAll("username=:name",array(":name"=>$username)); 2、$admin=Admin::mod...
閱讀全文
posted @
2012-01-04 16:06 小果子 閱讀(2502) |
評論 (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 小果子 閱讀(772) |
評論 (0) |
編輯 收藏
posted @
2011-12-23 10:30 小果子 閱讀(220) |
評論 (0) |
編輯 收藏