Laravel 在查询执行之前挖掘时刻

Laravel tap into moment before query execution

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

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

我可以看到 Model 正在构造函数中加载范围,这让我得出结论,没有范围执行的实际查询在更远的地方,但是我不能好像找到了。

有什么地方可以让我在实际查询执行之前插入作用域(或类似的等价物)吗?

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

我想你可能会抛出一个错误,像这样:

throw new Exception()

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

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

我有 2 个想法:一个在这个 post 和 中; none 其中有效。在后者中,您可以看到我需要的用例是什么,以及我最终是如何解决它的。