解决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入库和出库
Jun 25 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP异步进程助手async-helper
Feb 05 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
mysql5写入和读出乱码解决
2006/11/25 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
Python中几个比较常见的名词解释
2015/07/04 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
学习Python需要哪些工具
2020/09/04 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
招商经理岗位职责
2013/11/16 职场文书
厂长助理岗位职责
2013/12/27 职场文书
审计主管岗位职责
2014/01/31 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
护理医院见习报告
2014/11/03 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
女儿满月酒致辞
2015/07/29 职场文书
生日寿星公答谢词
2015/09/29 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android