博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp模型操作重点
阅读量:5009 次
发布时间:2019-06-12

本文共 1718 字,大约阅读时间需要 5 分钟。

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); // 根据条件保存修改的数据

转载于:https://www.cnblogs.com/smallgo/p/3183061.html

你可能感兴趣的文章
C++复习:对C的拓展
查看>>
linux设置静态IP和DNS以及改网卡名
查看>>
连续字符换行 溢出点点点 多行省略
查看>>
nodejs全局变量设置设置
查看>>
二分查找法(递归和非递归算法)
查看>>
C# DevExpress TreeList指定KeyFieldName后无法显示该列的问题
查看>>
多条记录的同一字段组合成一个字符串 FOR XML PATH
查看>>
APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
查看>>
剑指Offer面试题33(java版):把数组排成最小的数
查看>>
jquery中的 $(function(){ .. }) 函数
查看>>
奇怪的国家
查看>>
Linux nohup命令详解
查看>>
[MSDN] Using the Windows Azure Storage Services
查看>>
计算回文数
查看>>
MVC中如何选取后台数据展示下拉列表项
查看>>
java 代理的概念与作用
查看>>
get_free_page 和其友
查看>>
REVOKE - 删除访问权限
查看>>
解决UICollectionView的Cell复用引起的布局混乱问题
查看>>
校外实习报告(九)
查看>>