ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

  ThinkPHP的数据写入操作使用add方法,使用示例如下:

    $User = M("User"); // 实例化User对象
    $data[‘name‘] = ‘ThinkPHP‘;
    $data[‘email‘] = ‘[email protected]‘;
    $User->add($data);

  如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作:

    add($data=‘‘,$options=array(),$replace=false)

  其中add方法增加$replace参数(是否添加数据时允许覆盖),true表示覆盖,默认为false

  或者使用data方法连贯操作

$User = M("User"); // 实例化User对象
$User->data($data)->add();

  如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。 使用create方法的例子:

$User = M("User"); // 实例化User对象
// 根据表单提交的POST数据创建数据对象
if($User->create()){
    $result = $User->add(); // 写入数据到数据库
    if($result){
        // 如果主键是自动增长型 成功后返回值就是最新插入的值
        $insertId = $result;
    }
}

  create方法并不算是连贯操作,因为其返回值可能是布尔值,所以必须要进行严格判断。

支持的连贯操作

  在执行add方法之前,我们可以调用相关的连贯操作方法,配合完成数据写入操作。

写入操作支持的连贯操作方法包括:

连贯操作 作用 支持的参数类型
table 用于定义要操作的数据表名称 字符串和数组
data 用于指定要写入的数据对象 数组和对象
field 用于定义要写入的字段 字符串和数组
relation 用于关联查询(需要关联模型支持) 字符串
validate 用于数据自动验证 数组
auto 用于数据自动完成 数组
filter 用于数据过滤 字符串
scope 用于命名范围 字符串、数组
bind 用于数据绑定操作 数组
token 用于令牌验证 布尔值
comment 用于SQL注释 字符串
fetchSql 不执行SQL而只是返回SQL 布尔值

  3.2.3版本开始,可以支持不执行SQL而只是返回SQL语句,例如:

$User = M("User"); // 实例化User对象
$data[‘name‘] = ‘ThinkPHP‘;
$data[‘email‘] = ‘[email protected]‘;
$sql = $User->fetchSql(true)->add($data);
echo $sql;
// 输出结果类似于
// INSERT INTO think_user (name,email) VALUES (‘ThinkPHP‘,‘[email protected]‘)

  字段过滤

  如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:

$data[‘name‘] = ‘thinkphp‘;
$data[‘email‘] = ‘[email protected]‘;
$data[‘test‘] = ‘test‘;
$User = M(‘User‘);
$User->data($data)->add();

  其中test字段是不存在的,所以写入数据的时候会自动过滤掉。

  在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:非法数据对象:[test=>test]

  如果在add方法之前调用field方法,则表示只允许写入指定的字段数据,其他非法字段将会被过滤,例如:

$data[‘name‘] = ‘thinkphp‘;
$data[‘email‘] = ‘[email protected]‘;
$data[‘test‘] = ‘test‘;
$User = M(‘User‘);
$User->field(‘name‘)->data($data)->add();

  最终只有name字段的数据被允许写入,email和test字段直接被过滤了,哪怕email也是数据表中的合法字段。

  字段内容过滤

  通过filter方法可以对数据的值进行过滤处理,例如:

$data[‘name‘] = ‘<b>thinkphp</b>‘;
$data[‘email‘] = ‘[email protected]‘;
$User = M(‘User‘);
$User->data($data)->filter(‘strip_tags‘)->add();

  写入数据库的时候会把name字段的值转化为thinkphp。

  filter方法的参数是一个回调类型,支持函数或者闭包定义。

批量写入

  在某些情况下可以支持数据的批量写入,例如:

// 批量添加数据
$dataList[] = array(‘name‘=>‘thinkphp‘,‘email‘=>‘[email protected]‘);
$dataList[] = array(‘name‘=>‘onethink‘,‘email‘=>‘[email protected]‘);
$User->addAll($dataList);

  该功能需要3.2.3以上版本,3.2.3以下版本仅对mysql数据库支持

时间: 2024-10-16 15:29:48

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入的相关文章

ThinkPHP3.2基础教程(19)--模型-CURD操作-数据创建

ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法. CURD操作通常是可以和连贯操作配合完成的. 数据创建 在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表

ThinkPHP3.2基础教程(21)--模型-CURD操作-数据读取

在ThinkPHP中读取数据的方式很多,通常分为读取数据.读取数据集和读取字段值. 数据查询方法支持的连贯操作方法有: 连贯操作 作用 支持的参数类型 where 用于查询或者更新条件的定义 字符串.数组和对象 table 用于定义要操作的数据表名称 字符串和数组 alias 用于给当前数据表定义别名 字符串 field 用于定义要查询的字段(支持字段排除) 字符串和数组 order 用于对结果排序 字符串和数组 group 用于对查询的group支持 字符串 having 用于对查询的havi

ThinkPHP3.2基础教程(6)--模型-字段定义

字段定义 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息. 字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是: 数据库名.模型名(小写).php dem

ThinkPHP3.2基础教程(36)--控制器-前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller{ //前置操作方法 public functio

ThinkPHP3.2基础教程(34)--URL操作

URL大小写 系统默认的规范是根据URL里面的模块名.控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法. 如果是Windows环境,无论大小写如何都能定位到,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况.但是系统本身提供了一个不区分URL大小写的解决方案,可以通过配置简单实现. 只要在项目配置中,增加: 'URL_CASE_INSENSITIVE' =>true 配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小

ThinkPHP3.2基础教程(37)--控制器-Action参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析. 参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块.控制器和操作名)和操作方法中的参数进行绑定. 要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置: 'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数 参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定. 按变量名绑定 默认的参数绑定方式是按照变量名进行绑定,例如,我们给Bl

ATOM基础教程一分屏操作(15)

简介 使用过vim作为编辑器开发的程序员对于分屏操作是非常熟悉的,当我们需要对比一个文件的多处位置进行编码时,分屏操作将大大提高我们的工作效率. 使用分屏操作 鼠标右键点击,出现如下图菜单 Split Up–在上方打开一个分屏 Split Down–在下方打开一个分屏 Split Left–在左方打开一个分屏 Split Right–在右方打开一个分屏 演示:

ThinkPHP3.2基础教程(33)--路由功能

利用路由功能,可以让你的URL地址更加简洁和优雅.ThinkPHP支持对模块的URL地址进行路由操作.路由功能是针对PATHINFO模式或者兼容URL而设计的,暂时不支持普通URL模式. 路由解析的最终结果通常是把URL地址解析到当前模块的某个控制器下的操作方法(不能跨模块路由),在特殊的情况下,也可以跳转到外部地址或者执行闭包函数. 注意:3.2版本的路由定义是针对模块定义的,所以路由是在模块配置文件中定义的,并且模块本身不能被路由(模块名的路由使用模块映射或者采用域名部署即可). 路由定义

linux基础教程---用户和组操作

用户和组操作 linux 操作系统之所以稳定.安全,与它的"用户和组"的管理是分不开的,我先来看下,现实生活中项目组中的简单管理: 给用户设置操作文件权限的工作非常繁琐,不要落实. linux 创建用户的时候,会考虑给用户创建一个组别 系统增减文件的时候,也会把一个文件划分为一个组别里边 这样系统管理员每天只需要关心用户是那个组别的即可,就可以知道该用户具体有什么文件 操作权限. linux用的用户和组的操作: 1.组操作(/etc/group) ① 增加组信息 groupadd(是连