解决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 相关文章推荐
利用static实现表格的颜色隔行显示
Oct 09 PHP
一段php加密解密的代码
Jul 16 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
php上传文件的增强函数
Jul 21 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP实现非阻塞模式的方法分析
Jul 26 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面向对象全攻略 (七) 继承性
2009/09/30 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
CI框架常用函数封装实例
2016/11/21 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
JS 对象介绍
2010/01/20 Javascript
javascript动态加载二
2012/08/22 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
2015年语言文字工作总结
2015/07/23 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL