第一句子大全,网罗天下好句子,好文章尽在本站!

3分钟短文|Laravel 获取模型查询生成的SQL语句

时间:2023-05-13

而laravel提供了非常好的 debug 支持,只需在 env 文件内指定 debug = true ,就可以在页面打开 debug bar 用于调试

友情提示:本文共有 1344 个字,阅读大概需要 3 分钟。

引言

在程序开发阶段,我们关注于业务逻辑,实现功能。而laravel提供了非常好的 debug 支持,只需在 env 文件内指定 debug = true ,就可以在页面打开 debug bar 用于调试。

其中也包含有Query选项,列出了程序加载流程中所有调用的SQL语句,这非常方便。

如果在没有debug,或者没有 blade 模板渲染的页面,如何获取 ORM 组装出来的SQL语句呢?

学习时间

比如有一个原始的查询:

DB::table("users")->get();

它生成的SQL语句是

SELECT * FROM users

那么在程序上下文中,应该如何获取并打印这个SQL语句呢。我们需要使用框架提供的 DB 类的方法:

DB::enableQueryLog(); dd(DB::getQueryLog());

使用enableQueryLog()函数打开SQL记录,然后是正常的数据库逻辑,最后,使用 getQueryLog() 方法获取一个包含了生成的SQL语句,还有绑定的参数。

上述语句打印的结果大致如下:

还有一种方法,就是链式调用 QueryBuilder 的 toSql 方法,即可打印当前模型的SQL语句,而并不执行。

DB::table("users")->toSql()

上述方法输出的结果:

select * from `users`

当然只要是返回的 QueryBuilder 对象,均可使用。所以使用where子句查询后,直接打印较为方便。

但是 toSql 获取的只是带参数绑定的SQL,不打印参数。我们可以这样打印完整的语句:

$query = DB::table("users")->where("id", 10);$sql = str_replace_array("?", $query->getBindings(), $query->toSql());dd($sql);

生成的SQL语句,使用问号作为位置参数,如果想要格式化输出,还可以使用 vsprintf 这个函数:

$query = str_replace(array("?"), array(""%s""), $builder->toSql()); $query = vsprintf($query, $builder->getBindings()); dump($query);

效果与 str_replace_array 是一样的。

再进一步

还有一种思路,就是在 illumination 发起查询的时候,使用事件钩子,打印出SQL语句。有没有这样的钩子呢?laravel自然是有的。

Event::listen("illuminate.query", function($query, $params, $time, $conn) { dd(array($query, $params, $time, $conn));});

其中 illuminate.query 就是查询发起的事件钩子。

效果跟上一节所用方法相同,不再演示。

写在最后

本文通过3种方法打印出程序上下文所生成的SQL语句,可以优化查询的时候,起到很好的作用。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

本文如果对你有帮助,请点赞收藏《3分钟短文|Laravel 获取模型查询生成的SQL语句》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
床长人工智能教程pdf下载——文本自动生成研究进展与趋势

床长人工智能教程pdf下载——文本自动生成研究进展与趋势

...换和处理从而获得新文本的技术,具体说来包括文本摘要句子压缩句子融合文本复述等。国际上对上述不同技术均进行了多年的研究,相关研究成果主要发表在自然语言处理相关学术会议与期刊上,例如等。国际上几个主要的研...

2023-11-20 #经典句子

语音生成效果评价不再逐句进行:谷歌提长文本语音生成评价新系统

语音生成效果评价不再逐句进行:谷歌提长文本语音生成评价新系统

...有趣了,因为有很多方法可以用来评价以自然语序呈现的句子,并且令人惊讶的是,这些不同的方法之间尚未进行过严格的比较。这反过来又会阻碍依赖生成语音的产品的研究进展。为了应对这一挑战,谷歌在 SSW10 上发表了名...

2023-05-18 #经典句子

怎样生成语言才能更自然 斯坦福提出超越Perplexity的评估新方法

怎样生成语言才能更自然 斯坦福提出超越Perplexity的评估新方法

...「自然」的最常见标准,它的值越小,则表示模型生成的句子越接近人类语言。但是这种基于统计的方法并不能很好地评估生成质量,因此本文提出一种新的评估方式 HUSE,它为自然语言生成提供了结合人类和统计评估的新架构...

2023-06-06 #经典句子

自然语言生成的演变

自然语言生成的演变

...方向。什么是自然语言生成?语言生成的目的是通过预测句子中的下一个单词来传达信息。使用语言模型可以解决(在数百万种可能性中)预测哪个单词的可能性的问题,该模型是单词序列上的概率分布。语言模型可以在字符级、n...

2023-06-01 #经典句子

阿里谭继伟:基于序列到序列模型的文本摘要及淘宝的实践

阿里谭继伟:基于序列到序列模型的文本摘要及淘宝的实践

...展的任务可以把文本摘要分为单文档摘要、多文档摘要和句子摘要,其中值得注意的是句子摘要,简单来说就是把长句子生成短句子。根据摘要生成的方式又可以把文本摘要分为抽取式摘要和生成式摘要,并且对它们进行了简要...

2023-05-03 #经典句子

巴伊兰大学:事件新闻推文的交互式摘要生成

巴伊兰大学:事件新闻推文的交互式摘要生成

...面上探索信息更有意义,而不是像之前针对基于整个原始句子进行那样粗糙(见第6节)。我们利用抽象的方法来支持两种有用的交互模式。首先,我们将信息呈现在一个子弹式(bullet-style)的摘要中,其中最重要的信息一开始在项目...

2023-01-26 #经典句子

基于 Tensorflow eager 的文本生成 注意力 图像注释的完整代码

基于 Tensorflow eager 的文本生成 注意力 图像注释的完整代码

...成)我们可以生成一张猫的照片吗? (GANs)我们可以将句子从一种语言翻译成另一种语言吗? (NMT)我们可以描述图像内容吗? (图像注释)在暑期实习期间,我使用TensorFlow的两个最新API开发了这些示例:tf.keras,以及eager fu...

2023-10-03 #经典句子

Google发布表格文字生成数据集ToTTo

Google发布表格文字生成数据集ToTTo

...成数据组成,包含来源的表格数据,以及总结表格数据的句子配对,另外,还有可用来评估模型幻觉(Hallucination)的文字生成任务。ToTTo拥有121,000个训练样本,以及7,500个用於开发和测试的样本,Google提到,由於其标注的高精确...

2023-12-15 #经典句子

CVPR 2019:微软最新提出ObjGAN 输入一句话秒生成图片

CVPR 2019:微软最新提出ObjGAN 输入一句话秒生成图片

...GAN的方法有一个缺点:大多数图像合成方法都是基于全局句子向量来合成图像,而全局句子向量可能会丢失单词级别(word-level)的重要细粒度信息,从而阻碍高质量图像的生成。大多数方法都没有在图像中明确地建模对象及其关系...

2023-01-22 #经典句子