您的位置:首页 > 编程语言 > PHP开发

ThinkPHP3.2.3 数据库连接配置 创建普通model对象 创建父类Model对象 数据查询操作 辅助方法 连贯操作

2019-03-20 18:09 936 查看

1连接配置数据库
在shop/Common/Conf/config.php里边做数据库配置

其中DB_FIELDS_CACHE启用字段缓存的意思是,每次操作数据库时都需要mysql取出数据表里面的字段与操作的sql语句字段进行对比,开启以后就不需要每次都取出,而是取一次就缓存下来进行对比.
在设置中看到如下代码

'DB_DEPLOY_TYPE'        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'DB_RW_SEPARATE'        =>  false,       // 数据库读写是否分离 主从式有效
'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量
'DB_SLAVE_NO'           =>  '', // 指定从服务器序号

这个意思是数据库执行的是增删改查操作,在公司里面数据"查"操作太多了,造成负荷过重,可以买几个服务器专门执行"查"操作,上面代码的意思就是进行mysql读写分离设置
2.创建model模型类
原则:每个数据表 都对应一个Model模型类
具体与创建Controller控制器相似,就是把Controller字样换成Model即可
为sw_goods数据表创建一个Model模型类文件


在控制器里边实例化GoodsModel要体现“命名空间Model”的信息

为了避免在实例化model模型类的时候 该english与主流前缀sw_做结合,就可以在EnglishModel模型类里边重写父类属性定义操作的真实数据表名即可($trueTableName是父类属性定义操作的真实数据表名)

3. 两种方式实例化model对象
3.1实例化普通model对象
$model = new \Model\XXXModel();
该方式实例化对象可以调用父类Model的一些方法
也可以在本身类制作相关方法并调用
3.2 实例化基类Model对象
可以实现对数据库的基本操作
$model = D(); //实例化基类Model,没有关联任何表
$model = D(‘Goods’); //实例化基类Model对象,并操作xx_goods业务数据表
(该方式允许我们即使不创建具体的model模型类文件,也可以对数据表的数据进行操作)
如果一个数据表没有特殊方法要求,就可以通过D(XXX)进行操作。
如果数据表有特殊方法要求(例如用户名和密码判断需要一个特殊方法),就需要在普通model模型类里边定义好,通过new \Model\XXXModel()形式实例化对象,进而操作特殊方法。
两种方式实例化model类对象

三. 数据基本操作
1.数据查询操作
调用方法:model对象->select()
具体使用:
$model -> select(); //查询并返回数据表的全部记录信息
$model -> select(主键id值); //查询主键信息等于条件id值的记录
$model -> select(‘id1,id2,id3…’); //查询主键信息在条件范围内的记录
(使用select()方法会始终返回一个二维数组信息)
数据查询select()方法的具体使用

商品信息在模板中被foreach遍历展示

1.1 具体数据操作方法使用
①where()条件
$model -> where(条件值); //条件值就是sql语句where后边的条件信息
②limit()限制条数
$model -> limit(数字); //严格查询数字条数的记录
limit([偏移量,]长度)限制查询条数
偏移量:(当前页码-1)*长度
第一页$goods -> limit(0,7);
第二页$goods -> limit(7,7);
第三页$goods -> limit(14,7);
第四页$goods -> limit(21,7);
③field ()限制查询字段
$model -> field(字段1,字段2,字段3);
④order() 排序
$model -> order(‘排序条件字段asc/desc’);
⑤group() 分组查询group by
$model -> group(分组条件);
group by 分组查询的具体应用

⑥having()条件设置方法
having设置查询条件的效果 与 where使用效果类似
区别:
where:语句条件字段,必须是“数据表中存在的”字段
having:语句条件字段 必须是查询结果集中存在的字段

where和having使用区别:

where()/limit()/field() 三个方法直接存在于父类Model里边
having()/order()/group() 三个方法存在于Model的魔术方法__call()里边
一个对象调用本身类不存在的方法,会自动执行__call()魔术方法
相关辅助方法操作:

1.2连贯操作
以上具体方法在使用的时候可以一并使用多个,形成连贯操作,并且没有顺序要求
例如:
$obj -> limit() -> order() -> field() -> having() -> group()->select()
每个方法执行完毕都把参数信息传递给成员options,该options形成一个数组
系统最后就是依次把options数组的各个元素拼装到基本结构sql语句里边
连贯操作的关键是每个方法要return $this

where()和field()方法连贯操作

各个辅助方法可以连贯操作,并且没有顺序要求,它们在Think/Db/Driver.class.php里边被依次替换为基本结构sql语句的各个组成部分

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐