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信息时的验证规则。

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

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

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

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

格式:'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类中定义的:
 public static $_items=array();
public static function items()
{
$models=self::model()->findAll();
foreach($models as $model)
self::$_items[$model->id]=$model->name;
return self::$_items;
}
public static function roomitems()
{
$rooms=array();
$models=self::model()->findAll();
foreach($models as $model)
$rooms[$model->id]=$model->roomid;
return $rooms;
}
public static function projectitems()
{
$projects=array();
$models=self::model()->findAll();
foreach($models as $model)
$projects[$model->id]=$model->projectid;
return $projects;
}
public static function item($author_id)
{
$criteria=new CDbCriteria;
$criteria->condition='id=:id';
$criteria->params=array(':id'=>$author_id);
$model=self::model()->find($criteria);
self::$_items[$model->id]=$model->name;
return self::$_items[$author_id];
}

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

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

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

 public function beforeSave()
{
if(parent::beforeSave())
{
if($this->isNewRecord)
{
$this->author_id=Yii::app()->user->id;
}
return true;
}
else
return false;
}

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

未完待续。。

php的yii框架开发总结5的更多相关文章

  1. YII框架开发一个项目的通用目录结构

    YII框架开发一个项目的通用目录结构: 3 testdrive/ 4 index.php Web 应用入口脚本文件 5 assets/ 包含公开的资源文件 6 css/ 包含 CSS 文件 7 ima ...

  2. PHP Yii框架开发——组织架构网站重构

    最近一段时间在维护公司的组织架构网站(Org),旧版网站只是用了xampp简单搭建了一套环境部署在了windows机器上,代码结构相对简单. 整个架构如下: 整个架构没有用到复杂的结构,class里放 ...

  3. php的yii框架开发总结1

    最近用php的yii框架写了一个小的demo,虽然不复杂,但是也学习了很多东西,现在总结一下. 项目需求:为几个教研室写一个日报系统,每个人每天写日报,并且系统有自动实现发邮件功能. 额外要求:1.人 ...

  4. php的yii框架开发总结2

    开发流程:1.用yii创建网站目录,当时用命令行创建时遇到了问题,试了很久才找到原因:我的原因是在yii/framework/yiic.bat这个文件中的一条语句: if "%PHP_COM ...

  5. php的yii框架开发总结9

    这一篇讲解怎么实现的自动发邮件的功能,我在网上查了很多资料,很多都是用定时检测来实现的,我试过,效率太低,网站也卡了. 后来就写了一个.bat文件来实现刷新页面,用了windows的定时任务定时来运行 ...

  6. php的yii框架开发总结10

    1.CActiveForm是Chtml类的封装,但是它有数据验证的功能,有三种方式:服务器端.客户端.Ajax数据验证. 服务器端验证:当整个表单页面被提交后,在服务器端 进行验证.如果存在任何验证错 ...

  7. php的yii框架开发总结8

    EMailer是一个简单的封装PHPMailer类.利用这个扩展可以实现发邮件的功能. 下载地址:http://www.yiiframework.com/extension/mailer/ 下载解压把 ...

  8. php的yii框架开发总结7

    protected\config\main.php是整个网站中很重要的一个文件,引用文件,连接数据库,默认页面等都是在这里设置: 'import'=>array( 'application.mo ...

  9. php的yii框架开发总结6

    MVC中的Controller部分,所有的controller类都是继承自Controller基类,基类里面包含actionAdmin-管理员,actionIndex-一般默认显示,actionVie ...

随机推荐

  1. Python判断字符串编码以及编码的转换

    转自:http://www.cnblogs.com/zhanhg/p/4392089.html Python判断字符串编码以及编码的转换 判断字符串编码: 使用 chardet 可以很方便的实现字符串 ...

  2. java学习内容整理

    转自:http://www.cnblogs.com/caoleiCoding/p/6170555.html 首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习j ...

  3. php 在 匿名函数中 调用自身。。

    //php闭包实现函数的自调用,也就是实现递归 function closure($n,$counter,$max){ //匿名函数,这里函数的参数加&符号是,引址调用参数自己 $fn = f ...

  4. python 字符串 操作

    去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...

  5. Codeforces 527C Glass Carving (最长连续0变形+线段树)

    Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glas ...

  6. linux的shell脚本

    一.遇到的问题: 1.在Documents/shell_Document的文件夹下创建第一个脚本. 但是发现在图形化界面不能执行shell脚本.只能到命令行模式下才能执行.感觉太麻烦,我的虚拟机从图形 ...

  7. Web 2.0 浏览器端可靠性测试第2部分(如何发现和分析 Web 2.0 浏览器端的内存泄漏)

    介绍浏览器端的可靠性测试 在上一编文章中我们介绍了浏览器端可靠性测试的概念.测试方法.以及常用的测试和分析工具.我们知道,浏览器端可靠性测试,就是以浏览器为测试平台,通过模拟用户在真实场景下的页面操作 ...

  8. edis Cluster实现原理

    一.Redis Cluster主要特性和设计     集群目标 1)高性能和线性扩展,最大可以支撑到1000个节点:Cluster架构中无Proxy层,Master与slave之间使用异步replic ...

  9. SpringBoot初始教程之Servlet、Filter、Listener配置详解

    1.介绍 通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的 因为有可能打包之后是一个ja ...

  10. OfficeControl插件的用法

    项目中需要用到文档在线编辑的功能,网上找到这篇文章: http://hi.baidu.com/hurtingwings/item/bf83b6343305a94e3075a19e