解决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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php过滤XSS攻击的函数
Nov 12 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
php parse_str() 函数的定义和用法
May 23 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP使用非对称加密算法RSA
Apr 21 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
php生成二维码
2015/08/10 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python切片知识解析
2016/03/06 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
次世代生活态度:Hypebeast
2018/07/05 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
PHP面试题及答案一
2012/06/18 面试题
介绍一下grep命令的使用
2012/06/28 面试题
大学生活学习的自我评价
2013/12/03 职场文书
门卫班长岗位职责
2013/12/15 职场文书
德育标兵事迹材料
2014/08/24 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS