我有一个问题是如何根据我传递的参数使观察者的方法静音。我有一个
link_social
的参数,如果它设置为 false,我希望观察者不要触发 created()
函数。
$role = $request->role == 'creator' ? 'creator' : 'sponsor';
if($request->link_social == true){
$user = Auth::user()->$role()->create([
'name' => $request->safe()->name,
'about' => $request->safe()->about,
'account_plan_id' => $accountPlan->id,
]);
} else{
$user = Auth::user()->$role()->create([
'name' => $request->safe()->name,
'about' => $request->safe()->about,
'account_plan_id' => $accountPlan->id,
])->saveQuitely();
}
User
模型有一个关系方法creator
,观察者来自那个名为CreatorObserver
的模型
但我明白了
"message": "Call to undefined method App\\Models\\Creator::saveQuitely()"
保存(编辑)时出错,它仍然触发创建者观察者中的
created()
事件,该观察者正在另一个表中保存记录。
我正在尝试做像
$user->role->create()->saveQuitely()
这样的事情
创作者观察者
class CreatorObserver
{
/**
* Handle the Creator "created" event.
*
* @param \App\Models\Creator $creator
* @return void
*/
public function created(Creator $creator)
{
if ($creator->user->social_identifier['platform'] === PlatformType::Google->value) {
$youtube = new YoutubeService($creator->user->social_identifier);
SocialPlatform::createFor($creator, $youtube);
}
}
}
用户模型
public function sponsor()
{
return $this->hasOne(Sponsor::class);
}
public function creator()
{
return $this->hasOne(Creator::class);
}
创想模型
class Creator extends Model
{
use HasFactory;
protected $guarded = [];
public function user()
{
return $this->belongsTo(User::class);
}
public function socialPlatforms()
{
return $this->hasMany(SocialPlatform::class);
}
}
您可以使用静态
withoutEvents
方法https://laravel.com/docs/9.x/eloquent#muting-events
您可能偶尔需要暂时“静音”模型触发的所有事件。您可以使用 withoutEvents 方法实现此目的。 withoutEvents 方法接受一个闭包作为它唯一的参数。在此闭包中执行的任何代码都不会分派模型事件,闭包返回的任何值都将由 withoutEvents 方法返回: