解决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 if 想到的些问题
Mar 22 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
php获取网页请求状态程序示例
Jun 17 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 PHP
php实现记事本案例
Oct 20 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
Javascript实现字数统计
2015/07/03 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
共筑中国梦演讲稿
2014/04/23 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
中秋节随笔
2015/08/15 职场文书