旗下导航:搜·么
当前位置:网站首页 > PHP框架 > YII > 正文

yii衔接数据库有几种要领【yii框架教程】,yii

作者:搜搜PHP网发布时间:2019-12-05分类:YII浏览:89


导读:PDO体式格局(合适多表衔接查询)。(引荐进修:yii框架)$sql="";//原生态sql语句xx::model()->dbConnection-&g...

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体式格局

(1)New

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

Criteria体式格局

也能够运用 $condition 指定更庞杂的查询前提。 不运用字符串, 我们能够让 $condition 成为一个 CDbCriteria 的实例,它许可我们指定不限于 WHERE 的前提。

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

一种替换 CDbCriteria 的要领是给 find 要领通报一个数组。 数组的键和值各自对应规范(criterion)的属性名和值

上面的例子能够重写为以下:

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

当一个查询前提是关于按指定的值婚配几个列时, 我们能够运用 findByAttributes()。我们使 $attributes 参数是一个以列名做索引的值的数组。

在一些框架中, 此使命能够经由历程挪用相似findByNameAndTitle的要领完成。

虽然此要领看起来很诱人, 但它经常引发殽杂, 争执 和比方列名大小写敏感的问题。

Query Builder 体式格局

$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();

一、在用好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衔接数据库有几种要领的细致内容,更多请关注ki4网别的相干文章!

标签:yii