Laravel mute Observer 事件链接关系创建方法

问题描述 投票:0回答:1

我有一个问题是如何根据我传递的参数使观察者的方法静音。我有一个

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);
    }
}
php laravel laravel-9 observers
1个回答
0
投票

您可以使用静态

withoutEvents
方法https://laravel.com/docs/9.x/eloquent#muting-events

您可能偶尔需要暂时“静音”模型触发的所有事件。您可以使用 withoutEvents 方法实现此目的。 withoutEvents 方法接受一个闭包作为它唯一的参数。在此闭包中执行的任何代码都不会分派模型事件,闭包返回的任何值都将由 withoutEvents 方法返回:

© www.soinside.com 2019 - 2024. All rights reserved.