gpt4 book ai didi

php - 使用没有全局作用域的 Laravel 触摸

转载 作者:行者123 更新时间:2023-12-04 22:38:39 28 4
gpt4 key购买 nike

概念问题:
我在使用 touches 时遇到了一个非常简单的问题属性,自动更新依赖模型的时间戳;它正确地这样做了,但也应用了全局范围。

有什么办法可以关闭这个功能吗?或专门询问自动 touches忽略全局范围?

具体示例 :
更新成分模型时,应触及所有相关配方。这工作正常,除了我们有一个 globalScope用于根据语言环境分离配方,在应用触摸时也会使用它。

成分型号:

class Ingredient extends Model
{
protected $touches = ['recipes'];

public function recipes() {
return $this->belongsToMany(Recipe::class);
}

}

配方模型:
class Recipe extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new LocaleScope);
}

public function ingredients()
{
return $this->hasMany(Ingredient::class);
}
}

区域设置范围:
class LocaleScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$locale = app(Locale::class);

return $builder->where('locale', '=', $locale->getLocale());
}

}

最佳答案

如果要显式避免给定查询的全局范围,可以使用 withoutGlobalScope()方法。该方法接受全局范围的类名作为其唯一参数。

$ingredient->withoutGlobalScope(LocaleScope::class)->touch();
$ingredient->withoutGlobalScopes()->touch();

因为你没有调用 touch()直接地,在您的情况下,它需要更多才能使其工作。

您指定应该在模型 $touches 中触及的关系属性。关系返回查询构建器对象。看看我要去哪里?
protected $touches = ['recipes'];

public function recipes() {
return $this->belongsToMany(Recipe::class)->withoutGlobalScopes();
}

如果这与您的应用程序的其余部分混淆,只需创建一个专门用于触摸的新关系(呵呵 :)
protected $touches = ['recipesToTouch'];

public function recipes() {
return $this->belongsToMany(Recipe::class);
}

public function recipesToTouch() {
return $this->recipes()->withoutGlobalScopes();
}

关于php - 使用没有全局作用域的 Laravel 触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490959/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com