Как проверить, следует ли пользователь за другим, перед тем как подписаться или отписаться (прикрепить)

0

Я использовал много-много отношений в моей пользовательской таблице, чтобы заставить зарегистрированного пользователя следовать другому, но я сам не выяснил его, я проверил, что сделали другие, и попытался сделать что-то подобное, и это сработало. В моих методах у меня есть:

function follow(User $user) {
    $this->followers()->attach($user->id);
}

function unfollow(User $user) {
    $this->followers()->detach($user->id);
}

что позволяет мне следовать.

таблицы связаны с функцией что-то вроде:

return $this->belongsToMany('App\User', 'followers', 'user_id', 'follower_id');

теперь я передаю значение $user контроллером, а контроллер довольно прост:

    $userId = User::find($user);
    $willfollow = Auth::user();

    $willfollow->unfollow($userId);

Я знаю, что информация о контроллере, вероятно, не нужна, но в случае, если легко проверить отношение внутри контроллера, я бы предпочел сделать это таким образом, потому что я, очевидно, не так много знаю о применении метода.

Я использую Laravel 5.4.

Теги:
if-statement
laravel-5.4

1 ответ

2
Лучший ответ

Начиная с Laravel 5.3 вы можете использовать syncWithoutDetaching (наиболее эффективный):

$this->followers()->syncWithoutDetaching([$user->id]);

Другие способы:

$this->followers()->sync([$user->id], false);

Проверить наличие существующего перед сохранением (эффективный, только если вы уже загрузили $this->followers):

function follow(User $user) {
    if(!$this->followers->contains($user)) {
        $this->followers()->attach($user->id);
    }
}
  • 1
    Спасибо за эти мнения, кажется, что lile содержит получит всех последователей из базы данных и посмотреть, если кто-то соответствует. Возможен ли более оптимизированный способ?
  • 0
    @Nikonah последний пример syncWithoutDetaching - самый эффективный способ сделать это с помощью Laravel / Eloquent
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню