TP5 模型

  • Post author:
  • Post category:其他



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













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



版权声明:本文为benpaodelulu_guajian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。