yii 存取数据库方法

转载 2012年03月22日 16:21:43

1. 存取数据库方法
http://www.yiieye.com/book_cn/chapter21.html

存储第一种
存表时候用到 
例子:
$post=new Post;
$post->title='sample post';
$post->content='content for the sample post';
$post->createTime=time();/$post->createTime=new CDbexpression_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();
注当一个表存储4次的时候,需要创建4个handle new4次

存储第二种

存储后我们需要找到这条记录的流水id 这样做 $profile = new profile; $profile->id;


存储第三种

用于更加安全的方法,来绑定变量类型 这样可以在同一个表中存储两个记录
$sql="insert into user_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",$profile->id,PDO::PARAM_INT);
$command->bindParam(":field_id",$_POST['emailhiden'],PDO::PARAM_INT);
$command->bindParam(":flag",$tmpflag,PDO::PARAM_INT);
$command->bindParam(":value1",$_POST['email'],PDO::PARAM_STR);
$rowchange = $command->execute();
if( $rowchange != 0){ 修改成功 }// 用来判断

注:update delete都可以用这个方法
$sql="delete from profile where id=:id";
$command=profile::model()->dbConnection->createCommand($sql);
$command->bindParam(":id",$userid,PDO::PARAM_INT);
$this->rowflag=$command->execute();

$sql="update profile set pass=: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",$userid,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 = new CDbCriteria;
$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 流程

先查询记录是否存在,若存在就更新,不存在就新创建
注:1.第一次查询的变量,要跟save()前的变量一 致。2.存储时候需要再次 new一下库对象
$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) 当对象不为空
{
return true;
}else{
return false;


SELECT
读表时候用到
例子:

第一种find()
// find the first 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 primary key
$post=Post::model()->findByPk($postID,$condition,$params);


// find the row with the specified attribute values
$post=Post::model()->findByAttributes($attributes,$condition,$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 SQL statement
$post=Post::model()->findBySql($sql,$params);
例子
user_field_data::model()->findBySql("select id 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 = new CDbCriteria;
$criteria->select ='newtime';//选择只显示哪几个字段要与库中名字相同,但是不能COUNT(newtime) as name这样写
$criteria->join = 'LEFT JOIN Post 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 the specified condition
$n=Post::model()->count($condition,$params);
// get the number of rows using the specified SQL statement
$n=Post::model()->countBySql($sql,$params);
// check if there is at least a row satisfying the specified condition
$exists=Post::model()->exists($condition,$params);

UPDATE
例子:
$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save(); // save the change to database

// update the rows matching the specified condition
Post::model()->updateAll($attributes,$condition,$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 specified condition and primary key(s)
Post::model()->updateByPk($pk,$attributes,$condition,$params);
例子
$profile = profile::model()->updateByPk(
Yii::app()->user->user_id,
$attributes = array('pass' => md5($_POST['password']), 'role' => 1));

// update counter columns in the rows satisfying the specified conditions
Post::model()->updateCounters($counters,$condition,$params);

DELETE
例子:
$post=Post::model()->findByPk(10); // assuming there is a post whose ID is 10
$post->delete(); // delete the row from the database table
// delete the rows matching the specified condition
Post::model()->deleteAll($condition,$params);
// delete the rows matching the specified condition and primary key(s)
Post::model()->deleteByPk($pk,$condition,$params);
COMPARE


目前可以取出的
1. //$allquestion=field::model()->findAllBySql("select label 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=new CDbCriteria;
$criteria->condition='field.step_id=1';
$this->_post=field::model()->with('step')->findAll($criteria);
这样出来的数组里面包含step表中的值,且这个值的条件为 step.id=field.step_id

public function relations()
{
return array(
'step'=>array(self::BELONGS_TO, 'step', 'step_id'),
);
}

yii 备份还原数据库

备份Model: namespace backend\models; use Yii; use yii\db\ActiveRecord; class DbModel extends Active...
  • tang05709
  • tang05709
  • 2017年08月08日 15:56
  • 117

PHP Yii AR数据库操作实例

Yii框架AR CRUD操作详解,结合官方文档,给出详细的操作实例,并讲解参数如何使用。...
  • wangyuchun_799
  • wangyuchun_799
  • 2015年10月21日 10:25
  • 1224

YII Framework学习教程-YII的Model-数据库操作3-自定义的DAO操作

虽然我们可以使用CActvieReord完成大部分对数据库的操作。他简化了数据库操作,但是有时候却把一些数据库操作复杂化了。所以YII同时允许我们可以自己连接数据库,组织查询语句,执行查询语句,获取查...
  • mengxiangbaidu
  • mengxiangbaidu
  • 2011年12月01日 13:06
  • 13521

54. yii 动作参数绑定

protected function runWithParamsInternal($object, $method, $params) { $ps=array(); ...
  • enlyhua
  • enlyhua
  • 2017年06月16日 13:05
  • 141

Yii中小物件save()方法原理与使用

Yii当中使用小物件实现前端数据与后台数据库交互的时候,save()方法应该是比较重要的一个部分,但是之前对于save()方法的理解比较片面。...
  • xujing19920814
  • xujing19920814
  • 2017年01月20日 15:02
  • 677

Yii连接多个数据库的方法

Yii连接多个数据库的方法     一、配置多数据库 大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在主配置文件(main.php)中里声明其...
  • libinemail
  • libinemail
  • 2016年03月29日 10:09
  • 2005

YII中checkBoxList的数据库存取

checkBoxList是YII中的复选框组,用户在增加数据时,将以数组的形式把数据提交过来。但是,对应数据库的一个字段,只能保存字符串,不能保存数组。这时,我们可以先将提交过来的数组,用PHP的im...
  • u013718071
  • u013718071
  • 2014年03月18日 14:54
  • 1341

yii2框架session中保存和获取数据

保存数据 Yii::$app->session->set('user_exam', ['exam_id' => $exam_id, 'exam_type' => $exam_type]); 获取数据 ...
  • mrwu9902
  • mrwu9902
  • 2017年01月03日 08:51
  • 2524

YII下查看数据库日志的配置方式

在index.php的入口文件里配置: defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_TRACE_LEVEL') ...
  • u013699800
  • u013699800
  • 2014年07月03日 16:17
  • 665

YII框架连接数据库

1.protected\config\main.php 'db'=>array( 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../...
  • GlatChen
  • GlatChen
  • 2014年09月20日 17:01
  • 1966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:yii 存取数据库方法
举报原因:
原因补充:

(最多只允许输入30个字)