zoukankan      html  css  js  c++  java
  • yii的一些方法的解析和blog的详细解析

    1.  存取数据库方法
    存储第一种(SAVE )
    存表时候用到  
    例子:

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

    2、查询数据
    注:当项目没查找到整个对象会为空需要这样判定

    当对象不为空
    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);

    3、更新(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);

    4、删除(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);

    5、比较(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'),
      );
    }

  • 相关阅读:
    sql server 2005 设置用于复制的文本类型大小 [转]
    C#模拟post提交的实现方法
    项目经理角色定位
    无线不能连接 源于Wireless Zero Configuration服务不能自动启动
    软件版本Beta,RC,Demo,Build等是什么意思呢?
    用PUSHD/POPD获得bat文件执行的路径
    Windows下在本机创建SVN服务
    phpAmin如何导入导出大数据文件?
    整理的英语短语
    [转]项目管理心得:一个项目经理的个人体会、经验总结
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8294996.html
Copyright © 2011-2022 走看看