zoukankan      html  css  js  c++  java
  • php的yii框架开发总结5

    MVC架构之model类:

    我的日报系统用到的数据表:tbl_dailyreport表

    其中anthor_id是外键,对应tbl_user数据表的主键id,下面是tbl_user表

    class Dailyreport extends CActiveRecord可以看出model类全是继承自CActiveRecord类,这个基类太重要了,下面我们来研究一下。

    首先,rules()方法:返回一个数组array

    {return} array validation rules to be applied when validate() is called.

    它的作用是在验证model信息时的验证规则。

     1 public function rules()
     2     {
     3         // NOTE: you should only define rules for those attributes that
     4         // will receive user inputs.
     5         return array(
     6             array('content', 'required'),
     7             array('content','length','min'=>10),
     8             array('author_id', 'numerical', 'integerOnly'=>true),
     9             // The following rule is used by search().
    10             // Please remove those attributes that should not be searched.
    11             array('author_id', 'safe', 'on'=>'search'),
    12         );
    13     }

    required是必须要填写的,其实时间create_time也是必须要有的,但是在数据库里设置了自动填入当前时间,所以在这里就可以不用说明。length比如大于10个字,author_id必须为数字,'on'=>'search'是说明该字段是否可以作为搜索条件,这里设置只用author_id搜索,其实我们用的是author,也就是用的名字,而不是id,这个在后面会讲怎么实现的。

    下面是User类中的relations()方法

     1 public function relations()
     2     {
     3         // NOTE: you may need to adjust the relation name and the related
     4         // class name for the relations automatically generated below.
     5         return array(
     6             'dailyreports' => array(self::HAS_MANY, 'Dailyreport', 'author_id'),
     7             'project' => array(self::BELONGS_TO, 'Project', 'projectid'),
     8             'room' => array(self::BELONGS_TO, 'Room', 'roomid'),
     9             'is_true'=>array(self::BELONGS_TO,'Bool','receive_email'),
    10             'is_true1'=>array(self::BELONGS_TO,'Bool','receive_remind'),
    11         );
    12     }

    格式:'varName'=>array('relationType', 'className', 'foreign_key', ...additional options)

    varName就是得到的属性名,可以通过当前的类直接调用;relationType是关系,比如self::HAS_MANY是包含很多的意思,比如一个user会有会多条日报,它们是通过外键anthor_id连接的,self::BELONGS_TO是属于的意思,比如一个user只有一个room,外键关系是roomid;
    foreign_key是外键;
    additional options是其它的条件,一般是作为筛选信息的条件,
    比如:'dailyreports' => array(self::HAS_MANY, 'Dailyreport', 'author_id','order'=>'create_time desc'),
    对于得到的 dailyreports,我们可以这样用

    $dailyreports=$user->dailyreports;
    foreach($dailyreports $dailyreport)
        echo $dailyreport->content;

    我们通常需要获得一个model中的一些字段值,下面的方法是经常用到的,是在User类中定义的:
     1 public static $_items=array();
     2     public static function items()
     3     {
     4         $models=self::model()->findAll();
     5         foreach($models as $model)
     6             self::$_items[$model->id]=$model->name;
     7         return self::$_items;
     8     }
     9     public static function roomitems()
    10     {
    11         $rooms=array();
    12         $models=self::model()->findAll();
    13         foreach($models as $model)
    14             $rooms[$model->id]=$model->roomid;
    15         return $rooms;
    16     }
    17     public static function projectitems()
    18     {
    19         $projects=array();
    20         $models=self::model()->findAll();
    21         foreach($models as $model)
    22             $projects[$model->id]=$model->projectid;
    23         return $projects;
    24     }
    25     public static function item($author_id)
    26     {
    27         $criteria=new CDbCriteria;
    28         $criteria->condition='id=:id';
    29         $criteria->params=array(':id'=>$author_id);
    30         $model=self::model()->find($criteria);
    31         self::$_items[$model->id]=$model->name;
    32         return self::$_items[$author_id];
    33     }

    比如:items()方法就是得到User的id与name对应的array,用的是CActiveRecord基类中的findAll()方法,与find()方法类似,不过返回的是多条记录。roomitems()方法等类似。

    item()方法中用到的CDbCriteria基类也是非常重要的。

    CDbCriteria基类有很多属性:condition,select,params,order,distinct,join,having等数据库sql语句中常见的操作。可以给find(),findAll()等方法赋值$criteria进行查询,后面会经常用到。

     1 public function beforeSave()
     2     {
     3         if(parent::beforeSave())
     4         {
     5             if($this->isNewRecord)
     6             {
     7                 $this->author_id=Yii::app()->user->id;
     8             }
     9             return true;
    10         }
    11         else
    12             return false;
    13     }

    beforeSave()是一个事件,在保存到数据库之间执行,有些值可以在这赋。

    未完待续。。

  • 相关阅读:
    Android开发中,有哪些让你觉得相见恨晚的方法、类或接口?
    Android实用代码七段(五)
    Android实用代码七段(四)
    Android实用代码七段(三)
    Android实用代码七段(二)
    android实用代码
    发送Notification
    按两次back键退出程序
    java常用的几种设计模式
    拍照获取图片和相册中获取图片
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3246932.html
Copyright © 2011-2022 走看看