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
如果对你有帮助,请点个赞,谢谢。