Мутатор для уникального пользовательского атрибута

#laravel

Вопрос:

В моем коде эта строка User::where('socialite_id', $socialite_id)->exists(); используется так много раз, что я хочу просто написать вокруг нее мутатор или sth, чтобы сделать эту строку короче.

Поэтому мне нужно создать мутатор, который проверяет, есть ли пользователь с тем же socialite_id , что и у нового пользователя.

Я пришел с

     public function hasUniqueSocialiteIdAttribute($value){
        return !$this->where('socialite_id', $value)->exists();
    } 

Возможно, лучше поймать повторяющееся исключение и прервать его при ловле, но … нет.

Но эта штука не работает. Есть какие-нибудь предложения?

Ответ №1:

Область можно использовать для целей повторного использования:

 public function scopeSocialiteId($query,$id) {      
    return $query->where('socialite_id', $id);
}
 

и затем

 User::socialiteId($socialite_id)->exists();
 

Для получения дополнительной информации см. https://laravel.com/docs/8.x/eloquent#local-scopes