Laravel 7 创建时忽略全局范围
Laravel 7 ignore global scope when creating
我有一个模型 Publisher
与 Collection
存在多对多关系
两者都有一个名为 approved
的 属性,最初创建时设置为 false
我有一个全局范围,它隐藏了任何 Publisher
或 Collection
,其中 approved === false
public function apply(Builder $builder, Model $model)
{
$columnName = $this->tableName ? $this->tableName . '.approved' : 'approved';
$builder->where($columnName, '=', true);
}
Publisher
设置如下:
public static function boot()
{
parent::boot();
self::creating(function (Publisher $publisher) {
$publisher->creator_user_id = Auth::user()->id;
});
self::created(function (Publisher $publisher) {
$collection = Collection::create([
'approved' => (bool)$publisher->approved,
'title' => '',
]);
$collection->publishers()->sync($publisher->id);
});
问题是 Collection::create
有效,但在应用全局范围时 return 创建的 Collection
无效。它抛出以下错误:
No query results for model [App\Collection] 12
12是创建的Collection
的ID。它按预期在数据库中,因此该部分有效。
我曾尝试在 create()
之前和之后对创建语句应用 withoutGlobalScope(ApprovedScope::class)
,但这似乎没有帮助。
奇怪的是,我的控制器中的 $publisher = Publisher::create($request->all());
执行 return 创建的 Publisher
,即使它应用了相同的全局范围
有什么想法吗?
更新:我已经缩小了问题的范围,它是由 Collection
使用 koenhoeijmakers/laravel-translatable 包引起的。所以我仍在寻找一种方法来忽略此 create 语句的范围。
经过仔细调查和一些帮助,发现这是 Collection
上的 koenhoeijmakers/laravel-translatable
包的结果
我已经解决了这个问题,方法是不在导致问题的 store
路由上应用应用 ApprovedScope
的中间件。
我有一个模型 Publisher
与 Collection
两者都有一个名为 approved
的 属性,最初创建时设置为 false
我有一个全局范围,它隐藏了任何 Publisher
或 Collection
,其中 approved === false
public function apply(Builder $builder, Model $model)
{
$columnName = $this->tableName ? $this->tableName . '.approved' : 'approved';
$builder->where($columnName, '=', true);
}
Publisher
设置如下:
public static function boot()
{
parent::boot();
self::creating(function (Publisher $publisher) {
$publisher->creator_user_id = Auth::user()->id;
});
self::created(function (Publisher $publisher) {
$collection = Collection::create([
'approved' => (bool)$publisher->approved,
'title' => '',
]);
$collection->publishers()->sync($publisher->id);
});
问题是 Collection::create
有效,但在应用全局范围时 return 创建的 Collection
无效。它抛出以下错误:
No query results for model [App\Collection] 12
12是创建的Collection
的ID。它按预期在数据库中,因此该部分有效。
我曾尝试在 create()
之前和之后对创建语句应用 withoutGlobalScope(ApprovedScope::class)
,但这似乎没有帮助。
奇怪的是,我的控制器中的 $publisher = Publisher::create($request->all());
执行 return 创建的 Publisher
,即使它应用了相同的全局范围
有什么想法吗?
更新:我已经缩小了问题的范围,它是由 Collection
使用 koenhoeijmakers/laravel-translatable 包引起的。所以我仍在寻找一种方法来忽略此 create 语句的范围。
经过仔细调查和一些帮助,发现这是 Collection
koenhoeijmakers/laravel-translatable
包的结果
我已经解决了这个问题,方法是不在导致问题的 store
路由上应用应用 ApprovedScope
的中间件。