Yii framwork crud 笔记一

最近开始用YII了,之前用的是TP,用了后者的感受就是对象无处不在,关于YII的特性我就不说了官方文档说得

很清楚,为了方便大尽快上手,我就把YII的crud做个系统总结,YII在这方面提供了各丰富灵活的方法供君驱使,

好不说废话不多说直接码代码,希望能给刚接触它的同道参考,


连接DB(我们对数据库操作时需要一个连接对象)

Yii DAO 基于 PHP Data Objects (PDO) 构建,Yii DAO 主要包含如下四个类:

CDbConnection: 代表一个数据库连接。
CDbCommand: 代表一条通过数据库执行的 SQL 语句。
CDbDataReader: 代表一个只向前移动的,来自一个查询结果集中的行的流。
CDbTransaction: 代表一个数据库事务。

我们使用CDbConnection连接:$connection=new CDbConnection($dsn,$username,$password) ;$connection->active=true or false(开启或关闭)

$dsn的格式如下(PDO 驱动的名字,跟上一个冒号,再跟上驱动特定的连接语法)

SQLite: sqlite:/path/to/dbfile
MySQL: mysql:host=localhost;dbname=testdb
PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
SQL Server: mssql:host=localhost;dbname=testdb
Oracle: oci:dbname=//localhost:1521/testdb

由于 CDbConnection 继承自 CApplicationComponent,我们也可以将其作为一个应用组件使用,如下图

array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'class'=>'CDbConnection',
            'connectionString'=>'mysql:host=localhost;dbname=testdb',
            'username'=>'root',
            'password'=>'password',
            'emulatePrepare'=>true,  // needed by some MySQL installations
        ),
    ),
)

然后我们就可以通过 Yii::app()->db 访问数据库连接了。它已经被自动激活了,除非我们特意配置了 CDbConnection::autoConnect 为 false。

通过这种方式,这个单独的DB连接就可以在我们代码中的很多地方共享。


创建 create

例:// insert into table values($name, $mail);

execute  //return 被影响的行数  *可执行 insert update delete
Yii::app()->db->createCommand("insert into table values($name, $mail)")->execute();   

save    //return booler
$model = new Post(); $model->field=$param;$model->save();   

insert   //return booler
 Yii::app()->db->createCommand()->insert('table', array('name'=>'Tester', 'email'=>'tester@example.com',));   


删除 delete

例://delete from table where user=$id;

execute   //return 被删除的行数  *可执行 insert update delete
Yii::app()->db->createCommand("delete from table where user=$id")->execute();   

delete    //return 被删除的行数
Yii::app()->db->createCommand()->delete("table","user=:id",array(":id"=>$user));   

 delete    //return booler
$model = Post::model()->findByPk(1); $model->delete();   

deleteAll   //return 被删除的行数
Post::model()->deleteAll("user=:id",array(":id"=>$id));    

deleteAllByAttributes    //return 被删除的行数
Post::model()->deleteAllByAttributes(array("user"=>$id),"name=:name",array(":name"=>$name));    

deleteByPk    //return 被删除的行数   *pk(array(1,2)) 
Post::model()->deleteByPk($id,"name=:name",array(":name"=>$name));    


更新 update

例://updae table set name=$name where user=$id;

execute   //return 被更新的行数  *可执行 insert update delete
Yii::app()->db->createCommand("updae table set name=$name where user=$id")->execute(); 


save    

//return booler


$model = Post::model()->findByPk($id); $

model->name=$name;$model->save();  

updateAll   //return 被更新的行数
 Post::model()->updateAll(array("name"=>$name),"user=:id",array(":id"=>$id));    

updateByPk      //return 被更新的行数

Post::model()->updateByPk($id,array("name"=>$name),$condition,array(":param"=>$param));   

updateCount     //return 被更新的行数
Post::model()->updateCounters(array("一般是计数器“=>1),"user=:id",array(":id"=>$id));     


读取 read

例://select * from table where user=$id and name=$name

find    //return  record or null
Post::model()->find("user=:id  and  name=:name",array(":id"=>$id,":name"=$name));

findAll    //return  array()
Post::model()->findAll("user=:id  and  name=:name",array(":id"=>$id,":name"=$name));

findByAttributes     //return  record or null
Post::model()->findByAttributes(array("name"=>$name),"user=:id",array(":id"=>$id))

findAllByAttributes    //return   array()
Post::model()->findAllByAttributes(array("name"=>$name),"user=:id",array(":id"=>$id));

findByPK    //return  record or null
Post::model()->findByPk($id,"name=:name",array(":name"=>$name));

findAllByPk    //return array()
Post::model()->findAllByPk($id,"name=:name",array(":name"=>$name));

findBySql    //return  record or null
Post::model()->findBySql("select * from table where user=? and name=?",array($id,$name);

findAllBySql    //return  record or null
Post::model()->findAllBySql("select * from table where user=? and name=?",array($id,$name);

queryAll    //return  return array()
Yii::app()->db->createCommand("select * from table where user=$id and name=$name")->queryAll();

可以自己试一下
query();      // 查询并返回结果                                  queryRow();       // 查询并返回结果中的第一行    
queryColumn(); // 查询并返回结果中的第一列     queryScalar();  // 查询并返回结果中第一行的第一个字段

不过这里我要单独说下query(),因为它返回的是一个CDbDataReader对象而非直接的结果,因此要获取
结果集的记录可以这样:
$rows=$dataReader->readAll();   // 一次性返回所有的记录(数组)
while(($row=$dataReader->read())!==false) / /CDbDataReader::read()可以一次获取一行数据,到末尾时返回false
foreach($dataReader as $row)// CDbDataReader实现了迭代器接口因此可以使用foreach遍历


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值