问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用thinkPHP框架怎么实现该sql语句

发布网友 发布时间:2022-04-23 19:05

我来回答

2个回答

懂视网 时间:2022-04-06 10:09

下面由thinkphp框架教程栏目给大家介绍ThinkPHP框架SQL操作链式写法原理,希望对需要的朋友有所帮助!

引言

大家如果有面试几次不难发现,虽然国产的TP一直被人诟病。但是丝毫不能影响它在广大企业中的开发受到青睐,强大的社区,暴力实用详细的中文手册。有一个地方相信大家都不陌生,就是他的链式写法,链式写法的一定程度上简化了SQL工作量。OK,是怎么实现的,那我们从面向对象入手,分析链式写法的实现原理。

如下语句

$User->limit(10)->where('status=1')->select();

代码

我们知道,面向对象的方法,可以返回多种数据类型,当然,也可以返回对象自身,所以我们可以利用这个特性来实现

<?php
class Test{ 
private $var = ""; 
public function Func(){ 
$this->var = "Var is change"; 
return $this;
 }

}

 $obj = new Test();
 var_dump($obj);
 var_dump($obj->Func());

打印出来的结果:

object(Test)[1] 
private 'var' => string '' (length=0)
object(Test)[1] 
private 'var' => string 'Var is change' (length=13)

不难发现:我们私有变量obj->Func(),执行后,返回了一个带着$var = "Var is change"的对象。

$User->limit(10)->where('status=1')->select();

那么这个语句就不难理解了。 方法执行后,传递对象给下个方法,以此类推。

简单的Select()实现

<?php 
class UserModel{ 
private $field ="*"; 
 private $tableName =""; 
 private $where =""; 
 private $order =""; 
 private $limit =""; 
 function field($field){  
 $this->field = $field;  
 return $this;
 } 
 function table($tableName){  
 $this->table = $tableName;  
 return $this;
 } 
 function order($order){  
 $this->order = "ORDER BY ".$order;  
 return $this;
 } 
 function where($where){  
 $this->where = "WHERE ".$where;  
 return $this;
 } 
 function limit($index, $limit = 0){  
 $this->limit = "LIMIT ".$index;  
 if($limit){  
 $this->limit.= ",{$limit}";
  }  
  return $this;
 } 
 function select(){  
 if(empty($this->tableName)){  
 $this->tableName = str_replace("Model", "", __CLASS__);//如果表名不指定,则获取类名
  }
  $selectSql ="SELECT {$this->field} 
    FROM `{$this->tableName}` 
    {$this->where} 
    {$this->order} 
    {$this->limit}"; 
    //构造SQL语句模版串  
    echo $selectSql;  
    //return mysql_query($selectSql); 执行拼接后的SQL语句
 }

 }

 $user = new UserModel();
 $user->where("`user` = 1")->order("`user` DESC")->limit(5)->select();?>

总结

思路大概就是通过链式操作方法,给SQL语句的各个条件赋值,然后到最后一步统一处理SQL语句。这里只是简单地实现下原理,有心的同学可以对方法参数多种类型判断,更加灵活地赋条件。比如where方法可以传数组。然后也可以依照此思路,做例如INSERT(),UPDATE(),DELETE()等等。这里只是抛砖引玉,如果要更加深入了解链式写法,也可以看TP源码。

热心网友 时间:2022-04-06 07:17

亲,这个不需要转换,直接使用就行了,TP里面提供了一个query方法的,直接吧sql传递进去
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
给我推介几条暖心的话,哄朋友开心 宫崎骏作品里超级治愈的暖心句子汇总 宫崎骏的暖心语录 宫崎骏情话最暖心短句 已知a的3m=3,b的3n=2,求(a的2m次方)的3次方+(b的n次方)的3次方-a的... 已知a的3m次方=3,b的3n=2. 求:(a的2m次方)的三次方+(b的n次方)的3次方... 已知a 2m =2,b 3n =3,求(a 3m ) 2 -(b 2n ) 3 +a 2m ?b 3n 的值为... 已知a的2m次方等于2,b的3n次方等于3 已知A的2M次幂=2,B的3N=3,求(A的3M次幂)的2次幂—(B的2N次幂)的3次幂... 已知a的2m次方=2,b的3n次方=3,求(a的3m次方)²-(b的2n)³+a的2m... 百香果可以用温水泡?还有吃法? thinkphp 3.1.2 中M方法使用sql语句报错问题; 谁能帮忙提供详细的在ThinkPHP中连表查询的SQL语句,谢谢了 thinkphp怎么获取添加的sql语句信息 thinkPHP3.1查询后数据输出 THINKPHP sql语句的问题 thinkphp 这个sql语句怎么用thinkphp的方式查询 ThinkPHP里怎么直接执行一句SQL语句? - PHP框架开发 请教thinkphp3打印sql语句 Thinkphp 我想知道下面语句变成sql语句是什么样,请问怎样输出? 请教大神thinkphp5 怎么打印sql语句 thinkphp怎么输出sql语句 thinkphp怎么打印sql语句 w10C盘满了,要怎么释放空间? win10系统应用商店下载软件很慢怎么办? 怎么安装windows10系统自带应用商店 感觉自己特别会杞人忧天,多余的担心,活得很压抑,请高手帮我开导开导,万分感谢! win10系统中应用商店怎么用 魅族手机在应用商店里怎么系统升级 win10应用商店更新系统后,应用商店还是老版本,怎么解决。 php thinkphp怎么获取sql执行结果 thinkPHP中 关于foreach里面执行sql语句该怎么写 thinkphp 里sql 语句如何解读??? 怎样用搜狗打出半个字 搜狗拼音输入法如何切换半角全角? 搜狗全(半)角的快捷键在何处设置? 急急急啊! 搜狗半角输入法怎么设置 搜狗拼音输入法的 半简 是什么意思? 怎样把搜狗输入法分成两半,一半数字一半九键 搜狗如何锁定半角 搜狗拼音输入法我现在一开机就是全角,怎么永久调为半角? 搜狗算法中怎么通过快捷键修改成半月牙 高铁人脸识别验票开始了吗? 那个搜狗拼音输入法中的全角和半角是什么东东? 当高铁遇上人脸识别:近期剃个光头可能认不出! 搜狗输入法全角半角 高铁人脸识别验票怎么通过 怀孕期间梦见自己意外怀孕流产怎么回事? 人脸识别系统的核心是什么? 高铁人脸识别验票程序开始了吗?