解决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 相关文章推荐
ADODB类使用
Nov 25 PHP
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
PHP强制转化的形式整理
May 22 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
第一个无线电台是由谁发明的
2021/03/01 无线电
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python根据服务获取端口号的方法
2019/09/25 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
小区门卫值班制度
2014/01/24 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
校庆筹备方案
2014/03/30 职场文书
五分钟演讲稿
2014/04/30 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
学生退学证明
2015/06/23 职场文书
五年级数学教学反思
2016/02/16 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers