data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值。

写操作

通常情况下我们都是通过create方法或者赋值的方式生成数据对象,然后写入数据库,例如:

  1. $Model = D('User');
  2. $Model->create();
  3. // 这里略过具体的自动生成和验证判断
  4. $Model->add();

又或者直接对数据对象赋值,例如:

  1. $Model = M('User');
  2. $Model->name = '流年';
  3. $Model->email = 'thinkphp@qq.com';
  4. $Model->add();

那么data方法则是直接生成要操作的数据对象,例如:

  1. $Model = M('User');
  2. $data['name'] = '流年';
  3. $data['email'] = 'thinkphp@qq.com';
  4. $Model->data($data)->add();

注意:如果我们同时使用create方法和data创建数据对象的话,则最后调用的方法有效。

data方法支持数组、对象和字符串,对象方式如下:

  1. $Model = M('User');
  2. $obj = new \stdClass;
  3. $obj->name = '流年';
  4. $obj->email = 'thinkphp@qq.com';
  5. $Model->data($obj)->add();

字符串方式用法如下:

  1. $Model = M('User');
  2. $data = 'name=流年&email=thinkphp@qq.com';
  3. $Model->data($data)->add();

也可以直接在add方法中传入数据对象来新增数据,例如:

  1. $Model = M('User');
  2. $data['name'] = '流年';
  3. $data['email'] = 'thinkphp@qq.com';
  4. $Model->add($data);

但是这种方式data参数只能使用数组。

当然data方法也可以用于更新数据,例如:

  1. $Model = M('User');
  2. $data['id'] = 8;
  3. $data['name'] = '流年';
  4. $data['email'] = 'thinkphp@qq.com';
  5. $Model->data($data)->save();

当然我们也可以直接这样用:

  1. $Model = M('User');
  2. $data['id'] = 8;
  3. $data['name'] = '流年';
  4. $data['email'] = 'thinkphp@qq.com';
  5. $Model->save($data);

同样,此时data参数只能传入数组。

在调用save方法更新数据的时候 会自动判断当前的数据对象里面是否有主键值存在,如果有的话会自动作为更新条件。也就是说,下面的用法和上面等效:

  1. $Model = M('User');
  2. $data['name'] = '流年';
  3. $data['email'] = 'thinkphp@qq.com';
  4. $Model->data($data)->where('id=8')->save();

读操作

除了写操作外,data方法还可以用于读取当前的数据对象,例如:

  1. $User = M('User');
  2. $map['name'] = '流年';
  3. $User->where($map)->find();
  4. // 读取当前数据对象
  5. $data = $User->data();
 

data方法也是模型类的连贯操作方法之一,的更多相关文章

  1. limit方法也是模型类的连贯操作方法之一

    limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 限制结果数量 例如获取满足要求的 ...

  2. table方法也属于模型类的连贯操作方法之一

    table方法也属于模型类的连贯操作方法之一,主要用于指定操作的数据表. 用法 一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了: 切换操作的数据表 ...

  3. ThinkPHP CURD方法盘点:data方法

    data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...

  4. thinkphp中data方法

    data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...

  5. thinkphp data方法

    data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...

  6. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  7. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  8. page方法也是模型的连贯操作方法之一

    page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法. 我们在前面已经了解了关于limit方法用于分页查询的情况,而page方法则是更人性化的进行分页查询的方法,例如还是 ...

  9. field方法属于模型的连贯操作方法之一

    field方法属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段,可以用于查询和写入操作. 1.用于查询 指定字段 在查询操作中field方法是使用最频繁的. $Model->fie ...

随机推荐

  1. 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+

    1.模板类pair的用法 包含头文件#include<utility>   http://blog.csdn.net/laixingjun/article/details/9005200 ...

  2. spark自定义函数之——UDAF使用详解及代码示例

    UDAF简介 UDAF(User Defined Aggregate Function)即用户定义的聚合函数,聚合函数和普通函数的区别是什么呢,普通函数是接受一行输入产生一个输出,聚合函数是接受一组( ...

  3. Mybatis使用Mapper方式CURD

    Mybatis 使用Dao代码方式进行增.删.改.查和分页查询. 1.Maven的pom.xml 2.配置文件 2.1.db.properties 2.2.mybatis.xml <?xml v ...

  4. React和vue的差异和相似地方

    React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...

  5. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  6. Android开发 了解ViewModel

    前言 ViewModel是google推出的一个数据处理框架,ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据ViewModel中数据会一直存活即使 activity ...

  7. 微信小程序传递URL中含有特殊字符

    小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...

  8. QQ空间批量删除说说

    按下F12,贴下如下代码 var delay = 1000; function del() { if (document.querySelector(".app_canvas_frame&q ...

  9. 两个对象值相同 (x.equals(y) == true),但却可有不同的 hash code,这句话对不对?

    不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同.Java对于eqauls方法和hashCode方法是这样规定的: (1)如果两个对象相同 ...

  10. 欧拉定理+质因子分解+矩阵快速幂——cf1182E

    好题! /* gi=c^i * fi gi=gi-1 * gi-2 * gi-3 把g1,g2,g3质因数分解 g1=p1^e11 * p2^e12 * p3^e13 ... pk^e1k g2=p1 ...