TP5 模型

tp5的controller里面连接数据库表模型:

以下tablename都是不包含表前缀的部分,prefix-tablename包含表前缀的完整表名


1.利用助手函数db(),直接连接数据库操作

$res=db('tablename')->find(); //返回数组


注意:使用db助手函数默认每次都会重新连接数据库,如果想采用相同的链接,需要传入第三个参数

$ress=db('tablename',[],false)->find();

这样,$resshe $res 采用的就是同一个链接啦。第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。

tp5.0.9以上 默认db 不再强制重新连接了。


2.利用助手函数 model()

$res=model('tablename')->find(); //返回对象


2.1利用系统 Model类 需要应用相应的命名空间,还是用助手函数吧

use think\Model;


3.利用Loder类,需要应用相应的命名空间:

use think\Loader;


$res = Loader::model('tablename')->find(); //返回对象


4.利用Db类,需要应用相应的命名空间,直接连接数据库操作:

use think\Db;


Db::name('tableneme')->find(); //返回数组

Db::table('prefix-tableneme')->find(); //返回数组

如果没有用到表前缀,那么 Db::name() 和Db::table() 效果是一样的,有表前缀,那么table必须要写全名。


5.通过new tablename,需要应用模型对应的命名空间:


use app\mokuai\moxing\tablename;

$db= new tablename;

$db->find(); //返回对象



注意:通过Db类连接数据库操作 或者 助手函数db(),是连接数据库,用于在conroller中进行数据库操作,不能调用model里的方法。

我觉得这种是面向过程编程的一个体现,所有的逻辑都在控制器中实现,不利于扩展和代码复用。但是效果很明显,不是很复杂的项目,可以面向过程快速完成,简单明了。

面向对象的编程,应该是在model里进行业务逻辑的处理,controller进行数据处理和流程控制(比如页面跳转,或者报错)。

以面向对象的思想去编程,在controller中就应该调用model里的方法,根据返回值做判断以及相应的处理,因此,在model里就会涉及相应的数据查询等逻辑。

所以 如果是调用model里得方法,那么controller里应该用model('表名')或者 静态调用 而不是db('表名')

如果有不对的地方,希望看到的人能留言指正,谢谢。


后记:

最近修改了自己的项目,也不算是修改,因为刚开始写,哈哈,model 里目前写的方法都写成静态方法了, 这样在方法里就不能$this了,然后想了一下怎么在静态方法里查询数据,在model(表名)和db(表名)之间纠结了一下,然后觉得 本来就是model了,为什么还要在实例化model呢,直接db 连接数据库就好啦。


2018-5-6




如果对你有帮助,请点个赞,谢谢。







  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值