【三十四】thinkphp之curd操作
1.数据创建(create)
接受提交过来的数据,比如表单提交的 POST(默认)数据。接受到数据后,还可以对数据进行有效的验证、完成、生成等工作
// 这里 create()方法就是数据创建,数据的结果就是提交的 POST 数据的键值对。 // 特别注意的是:提交过来的字段和数据表字段是对应的,否则无法解析 //根据表单提交的POST数据,创建数据 var_dump($user->create());
通过$_post接收数据
//通过数组手工获取数据,覆盖提交的 $data['name']='qqq'; $data['password']="456"; $data['email']="qqq@qq.com"; $data['age']=52; var_dump($user->create($data)); //通过对象手工获取数据,覆盖提交的 $data=new \stdClass(); $data->name=$_POST['name']; $data->password=$_POST['password']; $data->email=$_POST['email']; $data->age=$_POST['age']; var_dump($user->create($data)); // 默认是$_POST,传递$_GET修改 var_dump($user->create($_GET));
create()方法可以传递第二个参数,将要操作的模式,有两种:Model::MODEL_INSER和 Model::MODEL _UPDATE,即新增和修改。当没有指定的时候,系统会根据数据源是否包含主键来自动判断,如果包含主键,则就是修改
操作
// 设置将要新增操作 var_dump($user->create($_POST,Model::MODEL_INSERT));
//限制可操作的字段 // 提交过来的数据只会接收name字段的值 var_dump($user->field('name')->create());
2.数据写入(add)
数据写入使用的是 add()方法。
//新增一条数据 // sql:INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('caiminfang','123','caiminfang@qq.com',15) $user=M('user1'); $data['name']='caiminfang'; $data['password']="123"; $data['email']="caiminfang@qq.com"; $data['age']=15; $user->add($data); // 结合create()方法 // INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('cmfcmf','456','cmf@qq.com',18)
$data $user->create(); $data['name']=$_POST['name']; $data['password']=$_POST['password']; $data['email']=$_POST['email']; $data['age']=$_POST['age']; $user->add($data);
//INSERT INTO `user1` (`name`) VALUES ('asdasd') //使用data连贯操作 $user=M('user1'); $data=$user->create(); $data['name']='asdasd'; var_dump($user->data($data)->add()); // data连贯方法,支持字符串、数组、对象 // INSERT INTO `user1` (`name`,`password`,`email`,`age`) VALUES ('xingshi','123','xingshi@qq.com',55) $data='name=xingshi&password=123&email=xingshi@qq.com&age=55'; $user->data($data)->add();
3.数据读取(select)
支持连贯方法的有:http://www.cnblogs.com/8013-cmf/p/8317720.html(请阅读此篇文章)
field和getField的区别:
- field():用于定义要查询的字段
- getField():用于查询某个字段的值
$user=M('user1'); //显示所有数据 // SELECT * FROM `user1` var_dump($user->select()); //显示默认第一条数据 // SELECT * FROM `user1` LIMIT 1 var_dump($user->find()); // 获取第一条name字段的值 // SELECT `name` FROM `user1` LIMIT 1 var_dump($user->getField('name')); // 获取所有user字段的name值 // SELECT `name` FROM `user1` var_dump($user->getField('name',true)); //获取所有user的name值和email值 // SELECT `name`,`email` FROM `user1` var_dump($user->getField('name,email')); //以冒号分隔 // SELECT `name`,`email`,`age` FROM `user1` var_dump($user->getField('name,email,age',":")); //限制2条数据 //SELECT `name`,`email` FROM `user1` LIMIT 2 var_dump($user->getField('name,email',2));
4.数据更新(save)
主要是对数据的修改操作。
$user=M('user1'); //修改数据 // UPDATE `user1` SET `name`='zxczxc' WHERE `id` = 4 $data['name']="zxczxc"; $map['id']=4; $user->where($map)->save($data); //默认主键为条件 // UPDATE `user1` SET `name`='hello' WHERE `id` = 3 $data['id']=3; $data['name']="hello"; $user->save($data);
结合create使用save
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form method="post" action="http://localhost/basic_thinkphp/index.php/Home/Model/save"> <!-- 必须要定义id的默认值 --> <input type="hidden" name="id" value="3"> 用户名:<input type="text" name="name"><br/> 密码:<input type="text" name="password"><br/> 邮箱:<input type="text" name="email"><br/> 年龄:<input type="text" name="age"><br/> <input type="submit" value="提交"> </form> </body> </html>
ModelController.class.php
<?php namespace Home\Controller; use Think\Controller; use Think\Model; use Think\stdClass; class ModelController extends Controller { public function save(){ $user=M('user1'); // 结合create // UPDATE `user1` SET `name`='test1',`password`='456',`email`='a@qq.com',`age`=88 WHERE `id` = 3 $user->create(); //post必须包含主键,我是在前端定义的 $user->save(); } }
$user=M('user1'); // 修改某一个值 // UPDATE `user1` SET `name`='labixiaoxin' WHERE `id` = 3 $map['id']=3; $user->where($map)->setField('name','labixiaoxin'); //统计累计,累加累减 // UPDATE `user1` SET `age`=age+1 WHERE `id` = 3 $map['id']=3; $user->where($map)->setInc('age',1);
5.数据删除(delete)
$user=M('user1'); // 直接删除主键(id=8) // DELETE FROM `user1` WHERE `id` = 8 $user->delete(8); //根据id删除 // DELETE FROM `user1` WHERE `id` = 47 $map['id']=47; $user->where($map)->delete(); //批量删除多个 // DELETE FROM `user1` WHERE `id` IN ('45','46') $user->delete("45,46"); //删除年龄为16且按照id倒序的前2个 // DELETE FROM `user1` WHERE `age` = 16 ORDER BY `id` DESC LIMIT 2 $map['age']=16; $user->where($map)->order(array('id'=>'DESC'))->limit(2)->delete(); // 删除所有数据 echo $user->where('1')->delete();
6.ActiveReocrd 模式
这种模式最大的特别就是简化了 CURD 的操作,并且采用对象化的操作方式,便于使用和理解。
// 添加一条数据 $user = M('User'); $user->user = '火影忍者'; $user->email = 'huoyin@qq.com'; $user->date = date('Y-m-d H:i:s'); $user->add(); //结合create $user = M('User'); $user->create(); $user->date = date('Y-m-d H:i:s'); $user->add(); //找到主键为4的值 $user = M('User'); var_dump($user->find(4)) //查找user=蜡笔小新的记录 $user = M('User'); var_dump($user->getByUser('蜡笔小新')); //输出userecho $user->user; //通过主键查询多个 $user = M('User'); var_dump($user->select('1,2,3')); //修改一条数据 $user = M('User'); $user->find(1); $user->user = '蜡笔老新'; $user->save(); //删除当前找到的数据 $user = M('User'); $user->find(11); $user->delete(); //删除主键为10的数据 $user = M('User'); $user->delete(10); //删除主键为10,11的数据 $user = M('User'); $user->delete('10,11'