请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Db::raw 不能静态调用

在tp6的更新中方法中 有直接静态调用raw方法
图片描述

但是实地使用之后报错了 不能静态调用
报错信息
Non-static method think\DbManager::raw() should not be called statically

只能实例化后调用
图片描述
这是手册上写的不对 还是需要做什么其他操作才能调用

图片描述
使用的tp6版本是 6.0.4

正在回答

1回答

文档https://www.kancloud.cn/manual/thinkphp6_0/1037530

https://img1.sycdn.imooc.com//szimg/5f9793f209b4c71107200270.jpg

文档中说明Db表示门面Db类,而不是\think\Db,

raw是定义在\think\DbManager类的raw非静态方法,而\think\Db是继承\think\DbManager的,所以你实例化之后使用raw是没问题,但是他不存在static function raw()静态方法,你静态调用肯定是不行的


但是Db门面类是有定义__callStatic这个魔术方法的。如果找不到静态方法会找非静态方法的,定义在这个\think\Facade文件。



还有同学提问题最好把代码和报错截图全,我看到你前面也提了两三次本问题,直到这个问题还是没提清楚,比如,你应该截图出来,你是用Db:table()处理数据库还是使用模型类,这很重要的,因为模型和Db操作数据库虽然都是where(),insert等等操作,但是是有细节不一样的

1 回复 有任何疑惑可以回复我~
  • 提问者 幻想具象 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-11-06 11:22:25
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号