问题描述:
在使用thinkphp框架的时候使用了其中的ViewModel在实现视图的时候发现了其中的问题,不能使用where语句来筛选数据。
1
2
3
4
5
6
7
8
9
10class 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中视图模型存在内容请搜索靠谱客的其他文章。
发表评论 取消回复