Thinkphp中视图模型存在的问题已经解决方法

问题描述:

在使用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()
就是上面所示

阅读更多
版权声明: https://blog.csdn.net/zhujunxxxxx/article/details/44851767
个人分类: php技术类
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭