首頁 >php框架 >YII >yii連接資料庫有幾種方法

yii連接資料庫有幾種方法

(*-*)浩
(*-*)浩原創
2019-12-04 13:18:212898瀏覽

yii連接資料庫有幾種方法

PDO方式(適合多表連接查詢)。                   (建議學習:yii架構

$sql = "";//原生态sql语句 
xx::model()->dbConnection->createCommand($sql)->execute();  非select语句(update、insert、delete)
xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录
xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录

$sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

例如

$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

##Active Record方法##例如

$post=new Post; 
$post->title='sample post'; 
$post->content='post body content'; 
$post->save();

##Active Record方法

##例如

$criteria=new CDbCriteria; 
$criteria->select='title';  // 只选择 'title' 列 
$criteria->condition='postID=:postID'; 
$criteria->params=array(':postID'=>10); 
$post=Post::model()->find($criteria);
##Active Record

例如

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

##Active Record

例如

rreee

##! ##(1)New

$user = Yii::app()->db->createCommand() 
    ->select('id, username, profile') 
    ->from('tbl_user u') 
    ->join('tbl_profile p', 'u.id=p.user_id') 
    ->where('id=:id', array(':id'=>$id)) 
    ->queryRow();

Criteria方式

也可以使用$condition 指定更複雜的查詢條件。不使用字串, 我們可以讓 $condition 成為一個 CDbCriteria 的實例,它允許我們指定不限於 WHERE 的條件。 rrreee一種替代 CDbCriteria 的方法是給 find 方法傳遞一個陣列。數組的鍵和值各自對應標準(criterion)的屬性名和值

上面的例子可以重寫為如下:

rrreee

當一個查詢條件是關於按指定的值符合幾個列時, 我們可以使用findByAttributes()。我們讓 $attributes 參數是一個以列名做索引的值的陣列。

在一些框架中, 此任務可以透過呼叫類似findByNameAndTitle的方法實作。

雖然此方法看起來很誘人, 但它常常引起混淆, 衝突 和例如列名大小寫敏感的問題。

Query Builder 方式

rrreee

一、在用好AcitveRecord的情況下,即不要讓其產生比較二的SQL查詢方式,我的經驗,不必過分在意那點時間性能上的差別的。對於大數據查詢,記憶體空間上的話,在yii2中可以使用 toArray() 來節省記憶體消耗。

二、ActiveRecord之於PDO的優點在於其方便。

一個是比起書寫SQL語句,用ActiveRecord要簡單一點,更重要的是不容易出錯。

###二是提供了許多SQL語句以外的便利,例如參數過濾、綁定等等。這個web開發中你總是要遇到吧,一個SQL語句一個SQL語句的寫,程式碼重複使用程度不高不說,還容易某個地方忘記過濾了,形成安全隱患。 ######三、 Yii2中已經有Query,效能上優於ActiveRecord,可以當作替代品。當然,方便與效率是硬幣的兩面,其使用上不如ActiveRecord 方便。 ######但在專案中我的經驗是Query的使用頻率僅略少於ActiveRecord,個人認為Query/ActiveQuery是Yii2中引入的一個 激動人心的新feature。 ######四、前面幾條說的是ActiveRecord的應用場景。對於PDO,如果要用的話, 應該是對於比較複雜的SQL操作,例如一兩句話寫不清楚的。 ######這種情況下,使用ActiveRecord來構建,其複雜程度不亞於直接寫SQL,那麼可以考 慮使用PDO。但我印像中,如果專案中使用的SQL語句很複雜,會被寫成DB的View或是預存過程,所以,感覺PDO使用不多,可以說是極少的。 ######五、追求更高效率的話,個人也不認為應該過度使用PDO,這對後期維護帶來極大的難度。倒是可以考慮最佳化SQL查詢,優化索引和表格結構,使用快取等。值得一提的是,使用緩存,是最簡單、直接,成效也最明顯的手段。 ######六、永遠沒必要過早考慮效能問題###

以上是yii連接資料庫有幾種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn