laravel雄辩的惰性负载模型属性

nbnkbykc  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(155)

是否可以延迟加载模型属性。
用例是我有一个带有select语句的查询,并且可能是这样的情况,即返回的模型丢失了一个稍后需要的属性。
我知道将属性添加到select语句中是一个简单的解决方案,但也可能有人忘记这样做。
有没有办法强制它在使用时加载?否则,它将被视为值为null,这不是我在这里想要的。
我的理想场景就像关系延迟加载:
如果我没有加载/选择该列,它将触发一个单独的DB查询。我可以启用一个严格模式,如果发生这种情况,该模式将在开发期间抛出异常,因此我知道需要将其添加到select语句中。

91zkwejq

91zkwejq1#

一种解决方案是在AppServiceProvider.php中设置preventAccessingMissingAttributes,如下所示:

public function boot(): void
    {
        Model::preventAccessingMissingAttributes(!$this->app->isProduction());
    }

这将防止laravel在你试图访问一个不存在的属性时只返回null。它会抛出Illuminate\Database\Eloquent\MissingAttributeException
通过这种方式,您可以在开发过程中轻松发现此类问题,并避免错误地认为属性是null的情况。

相关问题