[英]How to add constrain to eager load in laravel model
我在模型中使用$ with属性来进行急切的加载关系,现在我需要添加约束来进行急切的加载。 我怎样才能做到这一点?
简单的渴望负载:
class Category extends Model
{
protected $table = 'categories';
protected $fillable = ['slug', 'lang','category', 'complex_id'];
protected $with = ['items'];
}
我想做的是这样的:
class Category extends Model
{
protected $table = 'categories';
protected $fillable = ['slug', 'lang', 'category', 'complex_id'];
protected $with = ['items' => function ($q) {
$q->where('lang', 'en');
}];
}
但这在php中是不允许的,并且我得到“常量表达式包含无效操作”异常。
也可以添加其他关系,例如:
public function englishItems()
{
return $this->hasOne('App\Item', 'category_id')->where(['lang' => 'en']);
}
并在$ with属性中使用它,但是以这种方式更改了关系名称,我们必须针对每种语言和其他问题创建一个关系。
谢谢。
我认为您想在每次获得类别时都渴望加载英语项目。
我认为这是全局范围的完美用例:
https://laravel.com/docs/5.8/eloquent#global-scopes
因此,在类别模型中,您可以定义以下内容:
class Category extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope('withEnglishItems', function (Builder $builder) {
$builder->with(['items' => function ($query) {
$query->where('lang', 'en');
}]);
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.