解决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 相关文章推荐
phpinfo 系统查看参数函数代码
Jun 05 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
php实现单链表的实例代码
Mar 22 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
laravel安装和配置教程
Oct 29 PHP
PHP图片加水印实现方法
May 06 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
php英文单词统计器
Jun 23 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP MSSQL 存储过程的方法
2008/12/24 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
vue接入腾讯防水墙代码
2019/05/07 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
python解析中国天气网的天气数据
2014/03/21 Python
跟老齐学Python之网站的结构
2014/10/24 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
python中的常量和变量代码详解
2018/07/25 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
网上开商店的创业计划书
2014/01/19 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
积极向上的团队口号
2014/06/06 职场文书
社会实践活动总结
2015/02/05 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python