解决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使用者状态管理功能的应用
Oct 09 PHP
Memcache 在PHP中的使用技巧
Feb 08 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 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高级编程-函数-郑阿奇
2011/07/04 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
python中最小二乘法详细讲解
2021/02/19 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
另类冲刺标语
2014/06/24 职场文书
立志成才演讲稿
2014/09/04 职场文书
客房部经理岗位职责
2015/02/02 职场文书
同学会感言
2015/07/30 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技