解析yii数据库的增删查改
发布时间:2020-12-13 06:24:47 所属栏目:PHP教程 来源:网络整理
导读:存储第一种 存表时候用到 例子: 代码如下: $post=new Post; $post->title='samplepost'; $post->content='content for thesample post'; $post->createTime=time();/$post->createTime=newCDbexpression_r('NOW()'); $post->save(); $user_field_data= new
存储第一种存表时候用到例子: 代码如下: $post=new Post; $post->title='samplepost'; $post->content='content for thesample post'; $post->createTime=time();/$post->createTime=newCDbexpression_r('NOW()'); $post->save(); $user_field_data= new user_field_data; $user_field_data->flag=0; $user_field_data->user_id=$profile->id; $user_field_data->field_id=$_POST['emailhiden']; $user_field_data->value1=$_POST['email']; $user_field_data->save(); 存储第二种存储后我们需要找到这条记录的流水id 这样做 $profile = new profile;$profile->id;
存储第三种用于更加安全的方法,来绑定变量类型 这样可以在同一个表中存储两个记录 代码如下: $sql="insert intouser_field_data(user_id,field_id,flag,value1)values(:user_id,:field_id,:flag,:value1);"; $command=user_field_data::model()->dbConnection->createCommand($sql); $command->bindParam(":user_id",$profile->id,PDO::PARAM_INT); $command->bindParam(":field_id",$_POST['firstnamehiden'],PDO::PARAM_INT); $command->bindParam(":flag",$tmpflag,PDO::PARAM_INT); $command->bindParam(":value1",$_POST['firstname'],PDO::PARAM_STR); $command->execute(); $command->bindParam(":user_id",$_POST['emailhiden'],$_POST['email'],PDO::PARAM_STR); $rowchange =$command->execute(); if( $rowchange != 0){ 修改成功 }//用来判断 $sql="delete from profile whereid=:id"; $command=profile::model()->dbConnection->createCommand($sql); $command->bindParam(":id",$userid,PDO::PARAM_INT); $this->rowflag=$command->execute(); $sql="update profile setpass=:pass,role=:role where id=:id"; $command=profile::model()->dbConnection->createCommand($sql); $command->bindParam(":pass",$password,PDO::PARAM_STR); $command->bindParam(":role",$role,PDO::PARAM_INT); $command->bindParam(":id",PDO::PARAM_INT); $this->rowflag=$command->execute(); // 同理变更updateAll()模式 $sql="update user_field_data set flag =:flag where user_id= :user_id and field_id= :field_id "; 原始sql语句 $criteria = newCDbCriteria; $criteria->condition ='user_id = :user_id and field_id= :field_id'; $criteria->params =array(':user_id' => $userid,':field_id'=> $fieldid); $arrupdate = array('flag'=> $flag); if(user_field_data::model()->updateAll($arrupdate,$criteria)!= 0) { 更新成功后。。。 } 第四种更新和存储应用同一个handle 流程:先查询记录是否存在,若存在就更新,不存在就新创建 代码如下: $user_field_data =user_field_data::model()->findByAttributes( $attributes = array('user_id'=>Yii::app()->user->user_id,'field_id'=> $key)); if($user_field_data !== null) { $user_field_data->value1= $value; $user_field_data->save(); } else { $user_field_data= new user_field_data; $user_field_data->user_id= Yii::app()->user->user_id; $user_field_data->field_id= $key; $user_field_data->value1= $value; $user_field_data->save(); } 代码如下: if($rows !== null) 当对象不为空 { returntrue; }else{ returnfalse; } SELECT 读表时候用到 例子: 第一种find() 代码如下: // find thefirst row satisfying the specified condition $post=Post::model()->find($condition,$params); // find the row with postID=10 $post=Post::model()->find('postID=:postID',array(':postID'=>10)); 同样的语句,用另种方式表示 $criteria=new CDbCriteria; $criteria->select='title';// only select the 'title' column $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria);// $params is not needed 第二种find() 代码如下: $post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), )); // find the row with the specified primarykey $post=Post::model()->findByPk($postID,$condition,$params); // find the row with the specified attributevalues $post=Post::model()->findByAttributes($attributes,$params); 示例: 第一种findByAttributes()$checkuser= user_field_data::model()->findByAttributes(array('user_id' =>Yii::app()->user->user_id,'field_id'=> $fieldid)); 第二种findByAttributes()$checkuser =user_field_data::model()->findByAttributes($attributes = array('user_id'=>Yii::app()->user->user_id,'field_id'=> $fieldid)); 第三种当没有conditions时候,不用params$user_field_data=user_field_data::model()->findAllByAttributes($attributes = array('user_id'=> ':user_id'), $condition = "field_id in(:fields)", $params = array(':user_id'=>Yii::app()->user->user_id,':fields'=> "$rule->dep_fields")); // find the first row using the specified SQLstatement $post=Post::model()->findBySql($sql,$params); 例子 user_field_data::model()->findBySql("selectid from user_field_data where user_id = :user_id and field_id =:field_id ",array(':user_id' =>$userid,':field_id'=>$fieldid)); 此时回传的是一个对象 第四种 添加其他条件http://www.yiiframework.com/doc/api/CDbCriteria#limit-detail$criteria = newCDbCriteria; $criteria->select='newtime';//选择只显示哪几个字段要与库中名字相同,但是不能COUNT(newtime) as name这样写 $criteria->join = 'LEFT JOINPost ON Post.id=Date.id';//1.先要在relation函数中增加与Post表的关系语句2.Date::model()->with('post')->findAll($criteria) $criteria->group ='newtime'; $criteria->limit = 2; //都是从0开始,选取几个 $criteria->offset = 2;// 从哪个偏移量开始 print_r(Date::model()->findAll($criteria)); 得到行数目或者其他数目 count // get the number of rows satisfying thespecified condition $n=Post::model()->count($condition,$params); // get the number of rows using the specifiedSQL statement $n=Post::model()->countBySql($sql,$params); // check if there is at least a row satisfyingthe specified condition $exists=Post::model()->exists($condition,$params); UPDATE例子: 代码如下: $post=Post::model()->findByPk(10); $post->title='new posttitle'; $post->save(); // save thechange to database // update the rows matching the specifiedcondition Post::model()->updateAll($attributes,$params); 例子:或者参考上面例子 代码如下: $c=new CDbCriteria; $c->condition='something=1'; $c->limit=10; $a=array('name'=>'NewName'); Post::model()->updateAll($a,$c); // update the rows matching the specifiedcondition and primary key(s) Post::model()->updateByPk($pk,$attributes,$params); 例子 代码如下: $profile =profile::model()->updateByPk( Yii::app()->user->user_id, $attributes = array('pass' =>md5($_POST['password']),'role' => 1)); // update counter columns in the rowssatisfying the specified conditions Post::model()->updateCounters($counters,$params); DELETE例子: 代码如下: $post=Post::model()->findByPk(10);// assuming there is a post whose ID is 10 $post->delete(); // delete therow from the database table // delete the rows matching the specifiedcondition Post::model()->deleteAll($condition,$params); // delete the rows matching the specifiedcondition and primary key(s) Post::model()->deleteByPk($pk,$params); COMPARE目前可以取出的 1.//$allquestion=field::model()->findAllBySql("selectlabel from field where step_id = :time1 ",array(':time1'=>1)); 2. //$criteria=new CDbCriteria; //$criteria->select='label,options'; //$criteria->condition='step_id=:postID'; //$criteria->params=array(':postID'=>1); //$allquestion=field::model()->findAll($criteria); //$allquestion=field::model()->find("",array("label")); 可以与在models文件夹中的 库连接文件relations()函数合用,这样可以联合查询 $criteria=newCDbCriteria; $criteria->condition='field.step_id=1'; $this->_post=field::model()->with('step')->findAll($criteria); 这样出来的数组里面包含step表中的值,且这个值的条件为step.id=field.step_id public functionrelations() { return array( 'step'=>array(self::BELONGS_TO,'step','step_id'), ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |