解决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
PHP生成月历代码
Jun 14 PHP
PHP中基本符号及使用方法
Mar 23 PHP
php flv视频时间获取函数
Jun 29 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
php实现的顺序线性表示例
May 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中hashtable实现示例分享
2014/02/13 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
python抓取网页内容示例分享
2014/02/24 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python for循环生成列表的实例
2018/06/15 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
市场营销管理制度
2014/01/29 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
国际贸易专业求职信
2014/06/04 职场文书
管理标语大全
2014/06/24 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
市场督导岗位职责
2015/04/10 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android