1.在项目配置文件下配置数据库信息
2.创建Model模型类
原则上每个数据表都对应一个Model模型类
3.实例化对象
实例化对象要表现命名空间
实例化普通Model对象
$Model = new \Model\xxxModel();
除了可以实现简单操作(调用父类Model方法实现
也可以实现一些复杂操作(调用具体普通Model方法实现)
使用D函数实例化
1>实例化父类Model对象===可以用于执行原生SQL语句(普通Model也可以)
$model = D();
2>实例化父类Model对象,同时指定数据表
$goods = D("Goods")实例化父类Model对象,同时操作goods数据表(该方式使得一个数据表即使没有对应的Model模型类,也不影响操作数据表)
小计:如果一个表没有特殊的方法要求,就可以通过D(xxx)进行操作。
如果数据表有一个特殊方法要求(例如用户名和密码要进行特殊判断)就需要在普通Model模型类里边定义好,通过new 、Model、xxxModel()实例化对象,进而进行操作方法。
4数据库的查询操作
调用方法:Model ->select();
具体使用:
$model ->select();//查询并返回数据表全部记录信息
$model->select(主键id值);//查询主键信息等于id值得记录
$model->select('id1,id2,id3...'); //查询主键信息在条件范围内的记录
(使用select()方法会始终返回一个二维数组信息)
具体数据操作方法使用
1>where()条件
$model->where(条件值);//条件值就是SQL语句where后边的结果值
2> limit()限制条件
$model->limit(数字);//限制查询记录条数
$model->limit(偏移量,长度)//偏移量等于页码减1 *长度 不推荐使用
3> fielf()限制条件查询字段
$model->field(字段1,字段2,字段3);
4> order()排序
$model->order('排序条件'asc/desc);
5> group()分组查询group by
$model->group(分组条件);
6> having()条件设置方法
having设置查询条件的效果与where使用效果类似
区别:
where:语句条件字段,必须是 数据表中存在的字段
having:语句条件,必须是结果集中存在的字段
连贯操作
以上具体方法在使用的时候可以一并使用多个,形成连贯操作,并且顺序要求
例如:
$obj ->limit()->order()->field->having()->group()
每个方法执行完毕都把参数信息传递给成员options,该options形成一个数组系统最后就是遍历options数组把一个复杂的SQL语句给拼装起来的
5.数据添加操作
调用方法:model-> add();
具体两种方式使用:
1>数组方式
$数组 = array{
元素(下标=>元素值),
...
}
下标:必须是数据表字段名称(否则不添加到数据表记录里边)
$model(普通对象)->add(数组);
数组的元素键名与数据表字段名称必须一致
2> AR(Active Record 活跃记录)方式
$model -> 属性(字段) = 值;//属性字段 与 数据表一致 否则不能写入数据
$model ->add();
AR规范要求:
1>一个Model模型类与一个具体的数据表对应
2>Model模型类实例化的对象 与 数据表一一对应
3>Model对象的属性 与 记录字段对应
TP框架的AR是仿真产品,因为在每个业务Model模型类里边并不存在对应的数据表字段信息。
6.数据修改操作
调用方法 Model 对象 ->save()
与add添加一致,具体有两种方式使用
1> 数组方式
$model->save(数组);
2> AR方式
$model-> 属性(字段)= 值;
...
$model->save();
数组元素下标(属性字段)必须以数据表字段一致
save()方法返回受影响的记录条数
!!! 数据表修改必须设置条件,主键id或者where,二选其一即可 否者操作失败
7.在后台实现数据的修改操作
1> get参数的传递和接收
pathinfo路由解析方式传递get参数信息格式:
http://网址/index.php/分组/控制器/操作方法/名称/值/名称/值...
控制器操作方法接收get参数:
并不是直接使用$_GET接收信息,而是通过方法的形式参数接收。
function 方法名称($名称,$名称){}
传递的get变量名称与方法形参变量名称必须一致
(形参在没有默认值的情况下,每次请求必须传值)
8.执行原生SQL语句
$sql = "SQL语句";
1> 查询语句: $model对象 ->query($sql);//返回一个二维数组
2> 添加/删除/修改语句 $model对象-> execute($sql); // 返回受影响记录条数
=========================================================================================
// 跳转到 edit 操作
$this->redirect('edit');
// 跳转到 UserAction下的edit 操作
$this->redirect('User/edit');
// 跳转到 Admin分组默认模块默认操作
$this->redirect('Admin/');
// 跳转到 Admin分组Index模块view操作
$this->redirect('Admin-Index/view');
// 跳转到 Admin分组Index模块view操作,uid参数为1,延迟3秒跳转
$this->redirect('Admin-Index/view', array('uid'=>1), 3,'页面跳转中~')
// 跳转到 其他OtherApp项目(非分组)的Admin项目分组User模块view操作
$this->redirect('OtherApp://Admin-User/view');
implode 把数组分成字符串
eg:implode(',',$array);//把$array以 ,分割成字符串