解决laravel查询构造器中的别名问题


Posted in PHP onOctober 17, 2019

Laravel框架对数据库的封装是比较完善的,用起来也比较方便。但之前有一个问题一直困扰着我,就是利用laravel作查询时。如果想给表名或是字段名起别名是比较麻烦的事。但翻阅它的文档不难发现,它提供了一个DB::raw()的方法给我们,利用这个方法,我们就可以轻松的实现对表的重命名。

问题还原:

一般的写法:DB::table('users')->select('id','username')->get();

这样写是一点问题没有的。

加别名的写法:DB::table('users as table1')->select('id')->get();

这样写也不会产生错误

我们尝试另一咱写法:DB::table('users as table1')->select('table1.id')->get();

这样写就报错了,但这种写法我们又是不能避免的,如我们要表users表进行自连接时,就必须要用到别名加点的方式去得到字段。这样问题就来了。

不着急,我们先看看这句话输出的SQL语句是什么样的。我们用laravel提供的一个方法toSql()去得到SQL语句

DB::table('usersas table1')->select('table1.id')->toSql();

结果为:select`ykttb_table1`.`id` from `ykttb_users` as `table1`

我们发现写table1.id时,laravel框架自动给我们加上了表前缀,很显然,这样的SQL语句得不到我们要的结果。

最后的尝试:DB::table('users astable1')->select(DB::raw('table1.id'))->get();

这样写就没错了,用上面的方法来输出SQL语句:select table1.id from `ykttb_users` as `table1`

这就是我们想要执行的SQL语句。

总结:在laravel中,给表起别名,直接写就可以;但在select语句中要用到表的别名来得到字段,我们就要在外面套一层DB::raw()。

PHP 相关文章推荐
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
Apr 23 PHP
php 文件上传实例代码
Apr 19 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
Yii框架中memcache用法实例
Dec 03 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 #PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 #PHP
解决laravel5.4下的group by报错的问题
Oct 16 #PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 #PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 #PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 #PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 #PHP
You might like
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
php中文验证码实现示例分享
2014/01/12 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python实现读取并显示图片的两种方法
2017/01/13 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Python开发的HTTP库requests详解
2017/08/29 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
什么是Rollback Segment
2013/04/22 面试题
网络技术专业求职信
2014/07/13 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
求职自我评价范文100字
2014/09/23 职场文书
会计简历自我评价
2015/03/10 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL