您的位置:首页 > 编程语言 > PHP开发

20150319--TP+聊天室

2016-05-08 21:17 344 查看
1、 多表连接 在查询结果,如果查询条件或查询结果不在同一张表中,那么我们需要使用多表连接

两种方式: 1)

这种查询的缺点:

如上图所示,如果商品表中有一个没有匹配到分类的商品,会被自动排除,也就是说,查询到的商品数量有误。 2)

TP中的表连接操作: 1) table :实现上面的第一种连接方式 语法: $model-> table(‘table1 t1,table t2’) ->where(‘t1.id=t2.sid’) ->select(); 2) join:实现上面的第二种连接方式 语法: $model-> join(‘[t1] left(right) join t2 on t1.sid=t2.id’) ->select(); 例1:

运行:

例2:查询分类的同时查询上级所属分类名称 查询结果或查询条件在同一张表中,就是自连接

(1) 开发控制器:

D(‘Category’)->join(‘t1 left join sp_category t2 on t1.pid=t2.pid); 指定要左联接的两个表,指定两个的连接条件 D(‘Category’)->join(‘t1 left join sp_category t2 on t1.pid=t2.pid)->field(‘t1.*,t2.name cate_name’); 指定要查询的字段列表,是t1表的所有字段和t2表的name字段 (2)模板

2、 Ajax应用 1) ajax的原生代码: var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4 && xhr.status==200){ xhr.responseText } } xhr.open(‘get’,’test.php?user=zhangsan’); xhr.send(null); 2) tp中的Ajax (1)DEFAULT_AJAX_RETURN 修改配置文件:config.php

(2)ajaxReturn 在控制器中,提供了一个方法,名:ajaxReturn 语法: $this->ajaxReturn($result,“ok!",1); l data 返回数据 l info 提示信息 l status 操作状态 3) 案例1: 模板:

控制器:

通过httpwatch获取数据包:

4) 分类联动案例: (1) 将jQuery将入到项目中



(2) 在模板中,创建第一个下拉列表,用于显示所有一级分类 查询一级分类:

模板:

运行:

(3) 设置第一个下拉列表的绑定事件:onchange

(4)创建控制器方法,用于查询所属一级分类下的所有二级分类

(5)完善前台ajax程序

3、 文件上传 在tp中,有一个类:ORG/Net/UploadFile,用于实现文件上传功能 上传代码: l import ( 'ORG.Net.UploadFile' ); l $upload = new UploadFile (); l $upload->savePath = './Public/Uploads/'; l if (! $upload->upload ()) { l echo $upload->getErrorMsg (); l } else { l $info = $upload->getUploadFileInfo (); l } (1) 实现文件上传

上传成功后,可以在/Public/Uploads下看到文件,可以看出,默认使用的是文件原名:

(2)将上传文件的信息入库

运行:

(3)完善文件上传 UploadFile类的其它属性: l saveRule :文件命名规则 time l autoSub :是否开启子目录功能 l subtype :子目录命名规则 date l dateFormat :子目录命名规则date的格式 l allowExts :允许上传的文件后缀 l allowTypes :允许上传的文件的MIME类型

运行:



4、 关联模型 如果查询结果或查询条件不在一个表中,那么可以使用关联模型解决这个问题。 1) 表关系 一对一 HAS_ONE 用户表 用户资料表 一对多 HAS_MANY 分类表 商品表 用户表 发贴表 多对一 BELONGS_TO 商品表 分类表 多对多 MANY_TO_MANY 用户表 角色表 2) RelationModel类 以前,我们定义模型时,需要使用子类模型继承父类模型。如果我们现在定义的模型需要定义表之间的关联关系,那么,这个子类模型继承父类模型。 语法: class UserModel extends RelationModel{ }

Model类中方法,RelationModel类也有这些方法 RelationModel类中特有的方法,Model类是不具备的 RelationModel类中的功能要比Model类要多。 3)$_link 这个属性定义在子类模型中,表示与其它表之间的表关联。 语法: protected $_link = array( '关联1' => array( '关联属性1' =>'定义', '关联属性N' =>'定义', ), ... );

4)关联属性 l mapping_type :表关系 l mapping_name :关联名称(将来获取数据时使用) l mapping_fields :要查询的字段列表 l class_name :要关联的表名称 l foreign_key :关联的字段 l parent_key :关联的字段(用于自连接) l condition :关联条件

5) 关联查询 l relation(true) relation是RelationModel类下的方法,只有一个参数,默认是false,表示不关联查询,true表示关联查询。 语法: $model->relation(true)->select();



运行:

6) 关联删除 语法: $model->relation(true)->delete(); 案例: 我们要删除分类的同时,也删除这个分类下所有商品 在分类模型中,再次定义一个关联 goods

另外,需要注意,在模型中,定义了多个表的关联关系,在关联查询时需要指定要关联的名称:

运行:

删除分类同时删除它下面的所有商品

tp中的关联删除有这样一个问题,当只删除一条数据时可以实现关联删除,当对多条数据同时删除时会有问题。

一、 聊天室 1、 页面设置

2、 数据库设计 数据库:chat 数据表: tp_user tp_message 表结构:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: