解决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 相关文章推荐
拼音码表的生成
Oct 09 PHP
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
解析yii数据库的增删查改
Jun 20 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
Centos7安装swoole扩展操作示例
Mar 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版(2)
2006/10/09 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
js异步加载的三种解决方案
2013/03/04 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
numpy基础教程之np.linalg
2019/02/12 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python解释器spython使用及原理解析
2019/08/24 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
仓库主管的岗位职责
2013/12/04 职场文书
业务员岗位职责范本
2013/12/15 职场文书
会计应聘求职信范文
2013/12/17 职场文书
优秀村官事迹材料
2014/01/10 职场文书
简单的辞职信范文
2014/01/18 职场文书
意向协议书范本
2014/04/23 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
领导干部学习心得体会
2016/01/23 职场文书