我是靠谱客的博主 健忘翅膀,最近开发中收集的这篇文章主要介绍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()
就是上面所示

最后

以上就是健忘翅膀为你收集整理的Thinkphp中视图模型存在的问题已经解决方法的全部内容,希望文章能够帮你解决Thinkphp中视图模型存在的问题已经解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部