解决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程序的方法小结
Feb 23 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
PHP查询网站的PR值
Oct 30 PHP
php操作xml入门之cdata区段
Jan 23 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
php实现等比例压缩图片
Jul 26 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
因str_replace导致的注入问题总结
Aug 08 PHP
PHP 实现缩略图
Mar 09 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+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
Python中运算符"=="和"is"的详解
2016/10/08 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
市场营销专业应届生自荐信
2014/06/19 职场文书
社区好人好事材料
2014/12/26 职场文书
2015年教研组工作总结
2015/05/04 职场文书
招商银行收入证明
2015/06/17 职场文书
任命书格式模板
2015/09/22 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
课改心得体会范文
2016/01/25 职场文书