ThinkPHP3.2-CURD操作

数据创建

create方法创建数据对象

create()方法支持从其他方式创建数据对象,例如,其他数据对象或者是数组。

  • 从User对象创建新的Member数据对象
$User = stdClass();
$User->name = 'ThinkPHP';
$User->email = 'ThinkPHP@gmail.com';
$Member = M("Member");
$Member->create($User);    
  • 从数组创建对象
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['status'] = 1;
$User = M('User');
$data = $User->create($data);  

创建失败,打出错误信息。

$User = D('User'); // 实例化User对象
if (!$User->create()) {
// 如果创建失败 表示验证没有通过 输出错误提示信息
   $this->error($User->getError());
} else {
   // 验证通过 可以进行其他数据操作
}

create方法的第二个参数可以指定创建数据的操作状态,默认情况下是自动判断是写入还是更新操作。系统内置的数据操作包括INSERT(1)和UPDATE(2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成UPDATE操作。

$Member = M("User");
$Member->create($_POST,Model::MODEL_UPDATE);

create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。

$User = M('User');
$User->create(); //创建User数据对象
$User->status = 1; // 设置默认的用户状态
$User->create_time = time(); // 设置用户的创建时间
$User->add(); // 把用户对象写入数据库

把用户对象写入数据库create方法所做的工作很复杂,在创建数据对象的同时,完成了一系列的工作。我们熟悉的令牌验证、自动验证自动完成功能,其实都必须通过create方法才能生效。

data方法创建简单的数据对象

如果只是想简单创建一个数据对象,并不需要完成一些额外的功能的话,可以使用data方法简单的创建数据对象。Data方法也支持传入数组和对象,使用data方法创建的数据对象不会进行自动验证和过滤操作,请自行处理。

$User = M('User');// 创建数据后写入到数据库 
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->data($data)->add();

数据写入

add方法插入一条数据
$User = M("User"); // 实例化User对象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->add($data);

如果写入了数据表中不存在的字段数据,则会被直接过滤。其中test字段是不存在的,所以写入数据的时候会自动过滤掉。

$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->data($data)->add();

如果写入结果$result数据非法则返回false,如果是自增主键 $result则返回主键值,否则返回1。

addAll方法插入批量数据
$User = M("User");
$dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
$dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');
$User->addAll($dataList);

addAll返回的不是影响条数,也不是返回的所有写入的主键id集,而是返回的写入的第一条数据的主键值。

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

数据读取

find读取数据

如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(复合条件的第一条记录)。

$User = M("User"); // 实例化User对象    
$data = $User->where('status=1 AND name="thinkphp"')->find();// 查找status值为1name值为think的用户数据 
select读取数据集

如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。

$User = M("User"); // 实例化User对象
$list = $User->where('status=1')->order('create_time')->limit(10)->select();// 查找status值为1的用户数据 以创建时间排序 返回10条数据
getField读取字段值

获取数据表中的某个列的多个或者单个数据,默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。

$User = M("User"); // 实例化User对象
$nickname = $User->where('id=3')->getField('nickname');// 获取ID为3的用户的昵称 

需要返回整个列的数据,加一个参数true

$User->getField('id',true); // 获取id数组
//返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值

如果传入多个字段的话,默认返回一个关联数组。注意,即使缺少true参数,返回的也是全部行数的数据

$User = M("User"); // 实例化User对象// 获取所有用户的ID和昵称列表    
$list = $User->getField('id,nickname');//两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组。

getField方法还可以支持限制数量

$this->getField('id,name',5); // 限制返回5条记录
$this->getField('id',3); // 获取id数组 限制3条记录

数据更新

save方法更新数据
$User = M("User"); // 实例化User对象
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->where('id=5')->save($data); // 根据条件更新记录

对象方式操作

$User = M("User"); // 实例化User对象
$User->name = 'ThinkPHP';
$User->email = 'ThinkPHP@gmail.com';
$User->where('id=5')->save(); // 根据条件更新记录

注意:save方法的返回值是影响的记录数,如果返回false则表示更新出错,因此一定要用恒等来判断是否更新失败。

如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值。

$User = M("User"); // 实例化User对象
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
$User->save($data); // 根据条件保存修改的数据
更新字段

更新个别字段的值,可以使用setField方法。

$User = M("User"); // 实例化User对象
$User-> where('id=5')->setField('name','ThinkPHP');// 更改用户的name值

setField方法支持同时更新多个字段,只需要传入数组即可。

$User = M("User"); // 实例化User对象
$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$User-> where('id=5')->setField($data);// 更改用户的name和email的值

统计字段(通常指的是数字类型)的更新,系统还提供了setInc和setDec方法。

$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1

数据删除

删除一条数据

$User = M("User"); // 实例化User对象
$User->delete(5); // 删除主键为5的用户数据

delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件。

$User = M("User"); // 实例化User对象
$User->where('id=5')->delete(); // 删除id为5的用户数据
$User->delete('1,2,5'); // 删除主键为1,2和5的用户数据
$User->where('status=0')->delete(); // 删除所有状态为0的用户数据

为了避免错删数据,如果没有传入任何条件进行删除操作的话,不会执行删除操作

delete方法的返回值是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。

本文介绍基本来自官方文档,如有疑问,参见ThinkPHP官方文档CURD操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,602评论 18 399
  • 第一部分 克服天性中的选择弱势 选择太多怎么办? 1.1.1管理学和心理学大师詹姆斯·马奇认为,我们一般人在做抉择...
    杨秀兵阅读 151评论 0 0
  • 难怪人总说:老人像小孩…… 人老了,会像孩时般碰碰撞撞…… 不同的是,孩时有父母护着;老了,福气好的有儿孙...
    Gloria淡然阅读 48评论 1 1
  • 在袅袅的烟雾两端 幻与实在交换 我看佛祖如虚幻 料佛祖看我 也作如是观 暗红的香火明灭间 像是在眨眼 那袅袅的烟 ...
    依依原上草阅读 344评论 3 2