zoukankan      html  css  js  c++  java
  • thinkphp模型操作重点

    create()

    令牌验证、自动验证和自动完成(我们会在后面看到相关的用法)功能,其实都必须通过create方法才能生效。Create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。因此在没有调用add或者save方法之前,我们都可以改变create方法创建的数据对象。

    data()

    Data方法也支持传入数组和对象,使用data方法创建的数据对象不会进行自动验证和过滤操作,请自行处理。但在进行add或者save操作的时候,数据表中不存在的字段以及非法的数据类型(例如对象、数组等非标量数据)是会自动过滤的,不用担心非数据表字段的写入导致SQL错误的问题。

    非法html代码可以使用htmlspecialchars进行编码,以防止用户提交的html代码在展示时被执行,以下是两种安全处理方法。 

    $_POST['title'] = htmlspecialchars($_POST['title']);
    M('User')->create();
    
    $data['title'] = $this->_post('title', 'htmlspecialchars');
    M('User')->create($data);

    字段映射

    在create()时,默认可以直接对$_POST参数进行匹配,但若参数和数据库字段不同时,可以在model中将字段进行映射,使得在create时可以自动匹配字段。

    Class UserModel extends Model{
        protected $_map = array(
            'name' =>'username', // 把表单中name映射到数据表的username字段
            'mail'  =>'email', // 把表单中的mail映射到数据表的email字段
        );
     }

    相反,若查询后需要将表字段还原到表单所对应的参数,那么需要另外加上一个条件

    $data = $User->parseFieldsMap($data);

    替换字段还可以直接操作filed字段,下面2条查询语句效果是一样的:

    $Model->field('id,nickname as name')->select();
    $Model->field(array('id','nickname'=>'name'))->select();

    filed用于输入查询的字段,那么当第二个参数为true时,则是排除参数,例如:

    $Model->field('status',true)->select();//查询除了status外所有的字段

    模型的data方法除了创建数据对象之外,还可以读取当前的数据对象,例如:

    $this->find(3);
    $data = $this->data();//直接获取查询结果

    order方法支持多条件排序:

    order('status desc,id asc')

    join最好不要加array参数,因为array参数情况下只可以只可以使用一次join查询,但是以下方式支持多次查询:

    $Model->join(' work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select();

     exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。查询表达式不仅可用于查询条件,也可以用于数据更新,例如:

    1. $User = M("User"); // 实例化User对象
    2.  // 要修改的数据对象属性赋值
    3. $data['name'] = 'ThinkPHP';
    4. $data['score'] = array('exp','score+1');// 用户的积分加1
    5. $User->where('id=5')->save($data); // 根据条件保存修改的数据
  • 相关阅读:
    MySQL的排序方式
    Hibernate中查询优化策略
    kafka实现SASL_PLAINTEXT权限认证·集成springboot篇
    kafka实现SASL_PLAINTEXT权限认证·服务器篇
    SpringMvc服务端实现跨域请求解决方案
    maven打包日志输出优化-去掉泛型与过时的警告
    SpringMVC之控制器的单例和多例管理
    springmvc中的controller是单例的
    com.caucho.hessian.io.HessianProtocolException: is unknown code 解决方案
    浅谈大型web系统架构
  • 原文地址:https://www.cnblogs.com/smallgo/p/3183061.html
Copyright © 2011-2022 走看看