如何在 Eloquent 中获得没有关系的模型?
How to never get Model without relationships in Eloquent?
我知道,我可以在 Laravel (9) 中使用 with()
或 doesntHave()
根据它们之间的关系获取模型数据,但我从来不想获取模型数据没有关系,所以总是在所有CRUD函数中写with()
函数很烦人。
有没有办法直接在模型中预先过滤没有关系的模型 class?
添加 protected $with = ['foo'];
将关系添加到每条记录,但仍包括没有关系的记录。
作为一个可选的奖励:也许绕过是很好的,所以通常所有的结果都会有关系,但也许对于一个特定的路径 GET /all_data
预选将被绕过。
如果按照此处所述将关系添加到模型的 $with
属性,则可以启用 eager loading by default
:https://laravel.com/docs/9.x/eloquent-relationships#eager-loading-by-default
文档内容如下:
Sometimes you might want to always load some relationships when
retrieving a model. To accomplish this, you may define a $with
property on the model:
=====编辑 1
另一种选择是使用 Global Scopes
https://laravel.com/docs/9.x/eloquent#global-scopes。
你可以从这里开始,你可以添加更多逻辑来排除没有关系的模型。
=====编辑2
额外的逻辑将从文档中添加:
https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence
protected static function boot(){
parent::boot();
static::addGlobalScope('relation', function($builder){
$builder->has('relation')->with('relation');
});
}
我知道,我可以在 Laravel (9) 中使用 with()
或 doesntHave()
根据它们之间的关系获取模型数据,但我从来不想获取模型数据没有关系,所以总是在所有CRUD函数中写with()
函数很烦人。
有没有办法直接在模型中预先过滤没有关系的模型 class?
添加 protected $with = ['foo'];
将关系添加到每条记录,但仍包括没有关系的记录。
作为一个可选的奖励:也许绕过是很好的,所以通常所有的结果都会有关系,但也许对于一个特定的路径 GET /all_data
预选将被绕过。
如果按照此处所述将关系添加到模型的 $with
属性,则可以启用 eager loading by default
:https://laravel.com/docs/9.x/eloquent-relationships#eager-loading-by-default
文档内容如下:
Sometimes you might want to always load some relationships when retrieving a model. To accomplish this, you may define a $with property on the model:
=====编辑 1
另一种选择是使用 Global Scopes
https://laravel.com/docs/9.x/eloquent#global-scopes。
你可以从这里开始,你可以添加更多逻辑来排除没有关系的模型。
=====编辑2
额外的逻辑将从文档中添加:
https://laravel.com/docs/9.x/eloquent-relationships#querying-relationship-existence
protected static function boot(){
parent::boot();
static::addGlobalScope('relation', function($builder){
$builder->has('relation')->with('relation');
});
}