Laravel 在查询执行前利用时刻

Posted

技术标签:

【中文标题】Laravel 在查询执行前利用时刻【英文标题】:Laravel tap into moment before query execution 【发布时间】:2020-11-10 20:29:03 【问题描述】:

我正在使用 Laravel 范围来限制最终用户可以根据一些提供的输入看到的内容,但是对于我当前的用例,这不再可以接受。

在应用其他查询之前,我想看看正在调用什么 Eloquent 方法,或者至少看看结束 SQL 是否正在执行 SELECTINSERT 或在实际执行之前的任何内容。

我可以看到Model 在构造函数中加载范围,这使我得出结论,将在没有范围的情况下执行的实际查询位于更远的地方,但是我似乎找不到它.

在执行实际查询之前,我是否可以在某个点插入范围(或类似的等效项)?

编辑:更令人困惑的是all() 方法没有进入 Eloquent Builder...

【问题讨论】:

【参考方案1】:

我想做的事情是不可能的。作用域在模型实例化时很早就被加载和应用(在任何 Eloquent 事件被触发之前)。

我有 2 个想法:一个在这篇文章中,另一个是 this one;这些都不起作用。在后者中,您可以看到我需要的用例是什么,以及我最终是如何解决它的。

【讨论】:

【参考方案2】:

我认为你可能会抛出一个错误,如下所示:

throw new Exception()

然后使用调试 html 输出。它应该有一个选项卡,显示最后的查询。不是最漂亮的主意,但也许可行。

【讨论】:

以上是关于Laravel 在查询执行前利用时刻的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询构建器 - 从另一个表中选择前 1 行

如何在laravel eloquent查询中获得前10个类别列表

laravel 的 Eloquent ORM 查询前50条数据 怎么查

在 laravel 中测试查询执行时间

如何在查询生成器 laravel 中执行此 SQL

Laravel - PDO Prepared Statement - 在其他无缓冲查询处于活动状态时无法执行查询