概述
问题描述:
在使用thinkphp框架的时候使用了其中的ViewModel在实现视图的时候发现了其中的问题,不能使用where语句来筛选数据。
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的视图
按照官方的文档所写的用法就是
$Model = D("CodeView");
$Model->where('id>10')->order('id desc')->select();
但是在我真正的使用的时候是不行的,至少上面那个用法显示的结果就是bool(false)
但是如果我把上面的where条件去掉
$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
$Model->where('code.id>10')->order('code.id desc')->select()
就是上面所示
最后
以上就是健忘翅膀为你收集整理的Thinkphp中视图模型存在的问题已经解决方法的全部内容,希望文章能够帮你解决Thinkphp中视图模型存在的问题已经解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复