PHP Yii AR数据库操作实例
官方的AR操作文档在:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar
在看过AR的官方文档后,由于官文讲的数据库操作的例子太少了,虽然概念讲的很详细,但仍然对AR无从下手,特别是AR类的想法增删改查的方法,参数根本不知道如何调用。本文的主要目的是,结合官文,提供更多的操作实例,让大家快速上手AR。
以下实例是基于官文的,请大家在阅读本篇文章时,同时查看官方文档。实例中使用的数据库表例子也是官文中提到的:
CREATE TABLE tbl_post ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, title VARCHAR(128) NOT NULL, content TEXT NOT NULL, create_time INTEGER NOT NULL );
代码实例如下,如果对方法调用,特别是参数有疑问的,请参考官文中对参数的解释,以及这些方法的定义。
<?php class PostController extends CController{ public function actionCreate(){ $post = new PostModel(); $post->title = "iPhone 5"; $post->content = "iPhone5 content"; $post->create_time = time(); if($post->save()){ echo __CLASS__.".".__FUNCTION__." success.<br>"; } } public function actionSearch(){ // /** // * find // * @var unknown // */ // $post = PostModel::model()->find("title=:tt", array(":tt"=>"iPhone 6s")); // // var_dump($post); // foreach ($post as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by criteria // */ // $critetia = new CDbCriteria(); // $critetia->select = "title,content"; // $critetia->condition = "id=:id"; // $critetia->params = array(":id"=>3); // $post2 = PostModel::model()->find($critetia); // foreach ($post2 as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by array // */ // $post3 = PostModel::model()->find(array( // "select"=>"id,title", // "condition"=>"id=:id", // "params"=>array(":id"=>1), // )); // foreach ($post3 as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by pk // */ // $post4 = PostModel::model()->findByPk(1,"title=:tt", array(":tt"=>"iPhone 6s") // ); // foreach ($post4 as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by Attributes // */ // $post5 = PostModel::model()->findByAttributes(array("title"=>"iPhone 6s","id"=>1)/*,"title=:tt", array(":tt"=>"iPhone 6s")*/ // ); // foreach ($post5 as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by sql // */ // $sql="select * from {{post}} where id=3"; // $post6 = PostModel::model()->findBySql($sql); // foreach ($post6 as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } // /** // * find by Attributes // */ // $post6 = PostModel::model()->findAllByAttributes(array("title"=>"iPhone 5")/*,"title=:tt", array(":tt"=>"iPhone 6s")*/ // ); // foreach ($post6 as $p) // foreach ($p as $_key => $_value){ // echo "{$_key} : {$_value}<br>"; // } //findAll系列查询函数与find系列用法一致,此处仅举例findAllByAttributes,其他几个函数的用法同上面find函数。 /** // 查找满足指定条件的所有行 $posts=Post::model()->findAll($condition,$params); // 查找带有指定主键的所有行 $posts=Post::model()->findAllByPk($postIDs,$condition,$params); // 查找带有指定属性值的所有行 $posts=Post::model()->findAllByAttributes($attributes,$condition,$params); // 通过指定的SQL语句查找所有行 $posts=Post::model()->findAllBySql($sql,$params); */ /** * 返回符合条件的行数 */ $lines = PostModel::model()->count("title=:title", array(":title"=>"iPhone 5")); echo "line : {$lines}<br>"; //查询符合条件的数据行数,也可以使用如下函数 /* // 获取满足指定条件的行数 $n=Post::model()->count($condition,$params); // 通过指定的 SQL 获取结果行数 $n=Post::model()->countBySql($sql,$params); */ } /** * update */ public function actionUpdate(){ /** * 使用静态方法model()创建的对象,在更新时,更新这些行 * @var unknown */ // $post = PostModel::model()->findByPk(2); // $post->title="iPhone 6"; // if ($post->save()){ // echo "update success.<br>"; // } // else{ // echo "update failed.<br>"; // } /** * 使用new创建的对象,在更新时,将会新增一行。 * @var unknown */ // $post = new PostModel(); // $post->findByPk(2); // $post->title="iPhone 3"; // if ($post->save()){ // echo "update success.<br>"; // } // else{ // echo "update failed.<br>"; // } /** * 上面的方法,首先执行一次查询,然后将查询结果加载出来,执行更改后,再保存到数据库中。 * 下面的方法不需要将数据事先加载出来,直接就可以更新数据库 * 注意:如果没有符合更新条件的更新操作,更新结果会返回失败。如果更新的值和原值是一样的,也会更新失败。 */ $isUpdateSuccess = PostModel::model()->updateAll(array( "title"=>"iPhone 1", ), "id=:id", array( ":id"=>2, )); if ($isUpdateSuccess){ echo "updateAll success.<br>"; } else { echo "updateAll failed.<br>"; } /** * 还可以使用如下几种方法进行更新操作 // 更新符合指定条件的行 Post::model()->updateAll($attributes,$condition,$params); // 更新符合指定条件和主键的行 Post::model()->updateByPk($pk,$attributes,$condition,$params); // 更新满足指定条件的行的计数列 Post::model()->updateCounters($counters,$condition,$params); */ } /** * 数据库删除操作 */ public function actionDelete(){ /* * 先查询再删除 */ $post1 = PostModel::model()->findByPk(2); if ($post1->delete()){ echo "delete success.<br>"; } else{ echo "delete failed.<br>"; } /* * 以下方法可以在不事先查询并加载出查询结果的情况下进行删除,效率较高 * 以下函数用法与上面的更新操作类似,不再举例。 */ // // 删除符合指定条件的行 // Post::model()->deleteAll($condition,$params); // // 删除符合指定条件和主键的行 // Post::model()->deleteByPk($pk,$condition,$params); }
}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。