【发布时间】:2020-04-23 10:14:43
【问题描述】:
我有一个模型 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 有效,但在应用全局范围时不返回创建的Collection。它抛出以下错误:
No query results for model [App\Collection] 12
12 是创建的Collection 的ID。正如预期的那样,它在数据库中,因此该部分有效。
我尝试在 create() 之前和之后的 create 语句上应用 withoutGlobalScope(ApprovedScope::class),但这似乎没有帮助。
奇怪的是,我的控制器中的$publisher = Publisher::create($request->all()); 确实返回了创建的Publisher,即使它应用了相同的全局范围
有什么想法吗?
更新:我已经缩小了问题范围,它是由 Collection 使用 koenhoeijmakers/laravel-translatable 包引起的。所以我仍在寻找一种方法来忽略这个 create 语句的范围。
【问题讨论】:
-
您需要在您希望返回集合的位置添加代码。您的问题中缺少该部分。如果 collection::create() 工作正常,问题是在获取它时。
-
我添加了一行,将
Collection和Publisher同步到数据透视表。我知道问题出在获取它时,但它是作为create语句的一部分获取的。 -
更新了更多信息
标签: laravel global-scope