создание красноречивых отношений для пользователей, которые следуют друг за другом - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть приложение, такое как Instagram, в котором пользователи могут следить друг за другом, поэтому я добавил это в свою модель пользователя:

    public function following()
{
    return $this->belongsToMany(User::class, 'follow_rel', 'follower_id', 'followed_id');
}

public function followers()
{
    return $this->belongsToMany(User::class, 'follow_rel', 'followed_id', 'follower_id');
}

public function follow(User $user)
{
    $this->following()->syncWithoutDetaching($user);
}

public function unfollow(User $user)
{
    $this->following()->detach($user);
}

, и это моя миграция:

        Schema::create('follow_rel', function (Blueprint $table) {
        $table->increments('id');
        $table->boolean('accepted')->default(false);
        $table->unsignedInteger('follower_id');
        $table->unsignedInteger('followed_id');
        $table->timestamps();
    });

Работает нормально, но я не знаю, как обращаться с «принятой» колонкой.Как и в Instagram, я хочу, чтобы первый пользователь отправил запрос, и если учетная запись второго пользователя является личной, установите для принятого столбца значение false, поэтому, когда я пишу запрос для получения follow_relations, пропускаем те, которые не принимаются (как мягкое удаление).Как мне изменить свое отношение, чтобы добиться этого?или я должен сделать другую таблицу с именем 'requst_rel' и после принятия переместить ее в таблицу follow_rel?любая помощь будет оценена спасибо

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Просто вернуть отношение с помощью -> wherePivot ()

return $this->belongsToMany(User::class, 'follow_rel', 'follower_id', 'followed_id')->wherePivot(accepted, 1);

К сожалению -> syncWithoutDetaching () не работает с сводными таблицами.Вы должны выяснить процесс вручную:

public function follow(User $user)
{
    if (! $this->following->contains($user)) {
        $this->following()->attach($user, ['accepted' => 1]);
    }
}
0 голосов
/ 13 декабря 2018

Я не совсем уверен, что понимаю, но похоже, что вы хотите запросить отношения, которые только были приняты?Если это так, вы хотите использовать метод wherePivot:

$followers = $user->followers()-> wherePivot('accepted', true)->get();

Или вы можете создать метод для модели:

public function accepted_followers()
{
    return $this->belongsToMany(User::class, 'follow_rel', 'followed_id', 'follower_id')->wherePivot('accepted', true);
}

$followers = $user->accepted_followers;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...