1、在数据库添加等操作前,首先需要对数据进行创建(也就是接受提交过了的数据,比如表单的POST),接收数据后才可以对其进行验证、完成、生产等工作。也就是说,创建数据并不会马上在数据库生成数据。
比如:
$user = M('User');
var_dump($user->create());
这的create()方法就是数据创建,数据创建的结果是提交的POST数据的键值对。
注意:提交过来的字段和数据表字段必须对应,否则无法解析。
默认是以POST方式发送,若想以GET方式传递,则先在要传递的表单改方式为GET,然后:
var_dump($user->create($_GET));//传递方式改为GET即可
即可
2、create()
方法的内部工作分为9步:
1)获取数据源(默认是POST方式);
2)验证数据合法性(非数据或对象会过滤),失败则返回false;
3)检查字段映射;
4)判断数据状态(新增还是修改);
5)数据自动验证,失败返回false;
6)表单令牌验证,失败返回false;
7)表单数据赋值(过滤非法字段和字符串处理);
8)数据自动完成;
9)生成数据对象(保存在内存)。
3、create()
方法可以使用连贯操作配合数据创建,支持的连贯操作有:
1)field---用于定义合法字段(限制接收字段);
2)validate---用于数据自动验证;
3)auto---用于数据自动完成;
4)token---用于令牌验证。
1、案例如下:
比如已有控制器为UserController.class.php
,则测试代码为:
public function add(){
$user = M('User');
$data['user'] = 'hhh';
$data['email'] = '[email protected]';
$data['date'] = date('Y-m-d H:i:s');
$user->add($data);
}
add()
方法将会执行添加操作。
2、 结合create()
方法:
public function add(){
$user = M('User');
$data = $user->create();
$data['date'] = date('Y-m-d H:i:s');
$user->add($data);
}
3、add()
方法支持的连贯操作有:
1)table---定义数据表名称;
2)data---指定要写入的数据对象;
3)field---定义要写入的字段;
4)relation---关联查询;
5)validate---数据自动验证;
6)auto---数据自动完成;
7)filter---数据过滤;
8)scope*---命名范围;
9)bind---数据绑定操作;
10)token---令牌验证;
11)comment---SQL注释。
1、比如有select()
方法,它支持的连贯方法有:
1)where---查询或更新条件;
2)table---要操作的数据表名称;
3)alias---数据表别名;
4)field---查询字段;
5)order---结果排序;
6)group---查询分组;
7)having---分组再查询;
8)jion---多表链接查询;
9)union---合并SELECT查询;
10)distinct---取唯一值;
11)lock---锁。
2、 find()
方法,筛选一条数据(默认显示第一条数据)。
而select()
方法,默认显示所有数据。
//获取第一条user字段的值
$user = M('User');
var_dump($user->getField('user'));
//获取所有user字段的值
$user = M('User');
var_dump($user->getField('user',true));
//传递多个字段,获取所有,重复的会自动被屏蔽
$user = M('User');
var_dump($user->getField('user,email'));
//ID冒号分离
$user = M('User');
var_dump($user->getField('id,user,email',':'));
//限制2条数据
$user = M('User');
var_dump($user->getField('id,user,email',2));
3、结合create()
$user = M('User'); //POST必须包含主键
$user->create();
$user->save();
修改某一个值
$user = M('User');
$map['id'] = 1;
$user->where($map)->setField('user','某某某');
统计累计,累加累减
$user = M('User');
$map['id'] = 1;
$user->where($map)->setInc('count',1); //;累加,setDec是累减
1、数据删除使用的方法是delete()
方法。
直接删除主键
$user = M('User');
$user->delete(17);
根据ID来删除
$user = M('User');
$map['id'] = 16;
$user->where($map)->delete();
批量删除多个
$user = M('User');
$user->delete('1,3,5');
删除count为0且按时间倒序的前五个
$user = M('User');
$map['count'] = 0;
$user->where($map)->order(array('date'=>'DESC'))->limit(5)->delete();
delete()
支持的连贯操作有:
1)where---查询或更新条件;
2)table---要操作的数据表名称;
3)alias---数据表别名;
4)order---结果排序;
5)lock---锁;
6)relation---关联查询;
7)scope---命名范围;
8)bind---数据绑定操作;
9)comment---SQL注释。
这种模式最大的特点就是简化了CURD操作,并且采用对象化的操作方式,便于使用和理解。
添加一条数据
$user = M('User');
$user->user = 'huoying';
$user->email = '[email protected]';
$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('某某某'));
输出user
echo $user->user;
通过主键查询多个
$user = M('User');
var_dump($user->select('1,2,3'));
修改一条数据
$user = M('User');
$user->find(1);
$user->user = '某某2';
$user->save();
删除当前找到的数据
$user = M('User');
$user->find(11);
$user->delete();
删除主键为10的数据
$user = M('User');
$user->delete(10);
字段映射可以将表单里的name名称对应到数据表里的字段,这样防止系统自动屏蔽掉不对应的POST值。
1、字段限制
//本方法可以写到一个model内,然后通过D方法调用。
protected $_map = array(
// '表单内name名称'=>'数据表内字段名称'
'xingxing'=>'user',
'youxing'=>'email',
);
2、字段映射获取
$user = D('User');
var_dump($user->create());