Laravel 在查询执行前利用时刻
Posted
技术标签:
【中文标题】Laravel 在查询执行前利用时刻【英文标题】:Laravel tap into moment before query execution 【发布时间】:2020-11-10 20:29:03 【问题描述】:我正在使用 Laravel 范围来限制最终用户可以根据一些提供的输入看到的内容,但是对于我当前的用例,这不再可以接受。
在应用其他查询之前,我想看看正在调用什么 Eloquent 方法,或者至少看看结束 SQL 是否正在执行 SELECT
、INSERT
或在实际执行之前的任何内容。
我可以看到Model
在构造函数中加载范围,这使我得出结论,将在没有范围的情况下执行的实际查询位于更远的地方,但是我似乎找不到它.
在执行实际查询之前,我是否可以在某个点插入范围(或类似的等效项)?
编辑:更令人困惑的是all()
方法没有进入 Eloquent Builder...
【问题讨论】:
【参考方案1】:我想做的事情是不可能的。作用域在模型实例化时很早就被加载和应用(在任何 Eloquent 事件被触发之前)。
我有 2 个想法:一个在这篇文章中,另一个是 this one;这些都不起作用。在后者中,您可以看到我需要的用例是什么,以及我最终是如何解决它的。
【讨论】:
【参考方案2】:我认为你可能会抛出一个错误,如下所示:
throw new Exception()
然后使用调试 html 输出。它应该有一个选项卡,显示最后的查询。不是最漂亮的主意,但也许可行。
【讨论】:
以上是关于Laravel 在查询执行前利用时刻的主要内容,如果未能解决你的问题,请参考以下文章
如何在laravel eloquent查询中获得前10个类别列表