我是靠谱客的博主 健忘翅膀,这篇文章主要介绍Thinkphp中视图模型存在的问题已经解决方法,现在分享给大家,希望可以做个参考。

问题描述:

在使用thinkphp框架的时候使用了其中的ViewModel在实现视图的时候发现了其中的问题,不能使用where语句来筛选数据。

复制代码
1
2
3
4
5
6
7
8
9
10
class CodeViewModel extends ViewModel{ public $viewFields = array( 'code'=>array("id","name","summary","code","time"), 'language'=>array("id"=>"langid","name"=>"lang","_on"=>"code.language=language.id",'_type'=>'LEFT'), 'type'=>array("id"=>"typeid","name"=>"type","_on"=>"code.type=type.id",'_type'=>'LEFT'), 'user'=>array("id"=>"userid","name"=>"person","_on"=>"code.user=user.id",'_type'=>'LEFT') ); }

如上面的代码所示,我们定义了一个叫CodeView的视图

按照官方的文档所写的用法就是

复制代码
1
2
$Model = D("CodeView"); $Model->where('id>10')->order('id desc')->select();

但是在我真正的使用的时候是不行的,至少上面那个用法显示的结果就是bool(false)

但是如果我把上面的where条件去掉

复制代码
1
$Model->order('id desc')->select();

这样的话确实是能够执行的,那我就在想为什么是这样的呢,我就猜测是where条件的地方出现了问题于是我就打印出了这条sql语句的内容

SELECT code.id AS id,code.name AS name,code.summary AS summary,code.code AS code,code.time AS time,language.id AS langid,language.name AS lang,type.id AS typeid,type.name AS type,user.id AS userid,user.name AS person FROM zz_code code JOIN zz_language language ON code.language=language.id LEFT JOIN zz_type type ON code.type=type.id LEFT JOIN zz_user user ON code.user=user.id WHERE ( id>1 ) ORDER BY code.id desc

可以看出我们的wher条件中的id是不确定那个表的id的,因为我们每个表都有个主键名称叫id

我们把上面sql放在mysql中执行报错结果和我们预想的一样

Column 'id' in where clause is ambiguous

所以我们的解决办法就是在where条件中使用明确的id 

复制代码
1
$Model->where('code.id>10')->order('code.id desc')->select()
就是上面所示

最后

以上就是健忘翅膀最近收集整理的关于Thinkphp中视图模型存在的问题已经解决方法的全部内容,更多相关Thinkphp中视图模型存在内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部