zoukankan      html  css  js  c++  java
  • 20150319--TP+聊天室

    1、 多表连接

    在查询结果,如果查询条件或查询结果不在同一张表中,那么我们需要使用多表连接

    wpsF5D5.tmp

    两种方式:

    1)

    wpsF5F5.tmp

    这种查询的缺点:

    wpsF606.tmp

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

    2)

    wpsF616.tmp

    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:

    wpsF636.tmp

    运行:

    wpsF647.tmp

    例2:查询分类的同时查询上级所属分类名称

    查询结果或查询条件在同一张表中,就是自连接

    wpsF658.tmp

    (1) 开发控制器:

    wpsF668.tmp

    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)模板

    wpsF679.tmp

    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

    wpsF68A.tmp

    (2)ajaxReturn

    在控制器中,提供了一个方法,名:ajaxReturn

    语法:

    $this->ajaxReturn($result,“ok!",1);

    l data 返回数据

    l info 提示信息

    l status 操作状态

    3) 案例1:

    模板:

    wpsF69A.tmp

    控制器:

    wpsF6AB.tmp

    通过httpwatch获取数据包:

    wpsF6AC.tmp

    4) 分类联动案例:

    (1) 将jQuery将入到项目中

    wpsF6BC.tmp

    wpsF6CD.tmp

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

    查询一级分类:

    wpsF6ED.tmp

    模板:

    wpsF71D.tmp

    运行:

    wpsF72E.tmp

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

    wpsF74E.tmp

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

    wpsF78E.tmp

    (5)完善前台ajax程序

    wpsF7AE.tmp

    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) 实现文件上传

    wpsF7DE.tmp

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

    wpsF7EE.tmp

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

    wpsF82E.tmp

    运行:

    wpsF87D.tmp

    (3)完善文件上传

    UploadFile类的其它属性:

    l saveRule :文件命名规则  time

    l autoSub :是否开启子目录功能

    l subtype :子目录命名规则 date

    l dateFormat :子目录命名规则date的格式

    l allowExts :允许上传的文件后缀

    l allowTypes  :允许上传的文件的MIME类型

    wpsF8CC.tmp

    运行:

    wpsF8FC.tmp

    wpsFB6E.tmp

    4、 关联模型

    如果查询结果或查询条件不在一个表中,那么可以使用关联模型解决这个问题。

    1) 表关系

    一对一 HAS_ONE

    用户表 用户资料表

    一对多 HAS_MANY

    分类表 商品表

    用户表 发贴表

    多对一 BELONGS_TO

    商品表 分类表

    多对多 MANY_TO_MANY

    用户表 角色表

    2) RelationModel类

    以前,我们定义模型时,需要使用子类模型继承父类模型。如果我们现在定义的模型需要定义表之间的关联关系,那么,这个子类模型继承父类模型。

    语法:

    class  UserModel   extends  RelationModel{

    }

    wpsFBAD.tmp

    Model类中方法,RelationModel类也有这些方法

    RelationModel类中特有的方法,Model类是不具备的

    RelationModel类中的功能要比Model类要多。

    3)$_link

    这个属性定义在子类模型中,表示与其它表之间的表关联。

    语法:

    protected $_link = array(

    '关联1'  =>  array(

    '关联属性1' =>'定义',

    '关联属性N' =>'定义',

    ),

    ...

      );

    wpsFBAE.tmp

    4)关联属性

    l mapping_type :表关系

    l mapping_name :关联名称(将来获取数据时使用)

    l mapping_fields :要查询的字段列表

    l class_name :要关联的表名称

    l foreign_key :关联的字段

    l parent_key :关联的字段(用于自连接)

    l condition :关联条件

    wpsFBCF.tmp

    5) 关联查询

    l relation(true)

    relation是RelationModel类下的方法,只有一个参数,默认是false,表示不关联查询,true表示关联查询。

    语法:

    $model->relation(true)->select();

    wpsFBD0.tmp

    wpsFBE0.tmp

    运行:

    wpsFBF1.tmp

    6) 关联删除

    语法:

    $model->relation(true)->delete();

    案例:

    我们要删除分类的同时,也删除这个分类下所有商品

    在分类模型中,再次定义一个关联  goods

    wpsFC02.tmp

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

    wpsFC12.tmp

    运行:

    wpsFC13.tmp

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

    wpsFC24.tmp

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

    wpsFC34.tmp

    一、 聊天室

    1、 页面设置

    wpsFC45.tmp

    2、 数据库设计

    数据库:chat

    数据表:

    tp_user

    tp_message

    表结构:

    wpsFC56.tmp

    image

  • 相关阅读:
    nginx中root和alias的区别
    linux修改服务时间
    nginx.conf属性
    mybatis批量操作
    linux查看日志关键字搜索
    项目启动报错Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException
    springboot打包忽略Test
    mybatis文档
    On Java 8
    zabbix如何修改web字体
  • 原文地址:https://www.cnblogs.com/lifushan/p/5471620.html
Copyright © 2011-2022 走看看