• 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); // 根据条件保存修改的数据
  • 相关阅读:
    查看端口占用情况lsof,并关闭对应进程kill
    运行django项目出现Invalid HTTP_HOST header: '192.168.1.111:8000'. You may need to add '192.168.1.111' to ALLOWED_HOSTS
    ElasticSearch中如何让query should等同于filter should
    elasticsearch must和should组合查询
    Lua中table和json互转
    Git命令_git cherry pick
    Python17_Linux系统中安装Python3、virtualenv、virtualenvwrapper
    Linux书单推荐
    Linux32_配置vncserver
    Linux31_文件传输相关命令
  • 原文地址:https://www.cnblogs.com/smallgo/p/3183061.html
Copyright © 2020-2023  润新知