我很难获得具有全局范围的模型实例。
通常,如果您写:
$offer = Offer::createNew();
使用
public static function createNew()
{
return static::create([
'user_id' => auth()->id(),
'reviewed' => false
]);
}
您将获得模型实例。但是现在我添加了一个全局范围,无法使其正常工作。
您所期望的模型几乎是“空的”,因为在我的情况下,我只希望获得经过审核的商品。但是,如果我添加:
public static function createNew()
{
return static:::withoutGlobalScopes()->create([
'user_id' => auth()->id(),
'reviewed' => false
]);
}
我从一个仅包含以下属性的有限模型中得到了一个结果:
#attributes: array:5 [
"user_id" => 1
"reviewed" => false
"updated_at" => "2018-09-24 11:48:27"
"created_at" => "2018-09-24 11:48:27"
"id" => 2
]
但是我的模型显然具有更多的属性。如果我添加get(),我只会得到
Illuminate\Database\Eloquent\Collection {#1635
#items: []
}
那么在具有全局作用域时,如何通过create创建模型?
修改
我的第一个解决方法如下:
public static function createNew()
{
$model = static::create([
'user_id' => auth()->id(),
'reviewed' => false
]);
return static::withoutGlobalScopes()->find($model->id);
}
编辑2
我的Globalscope看起来像这样:
class FoodScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where('reviewed', true)
->where('paused', false);
}
}
答案 0 :(得分:1)
此行为不是由全局范围引起的。
要获取其他属性,请使用->fresh()
:
public static function createNew()
{
return static::create([
'user_id' => auth()->id(),
'reviewed' => false
])->fresh();
}