Предложения пользователей Laravel - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу показать предложения пользователя вошедшему в систему пользователю.

Он должен отображаться для пользователей, которые еще не вошли в систему вошедшего в систему пользователя follow, а у user нет blocked ибыло blocked.

Как я могу сделать соответствующий запрос?

Функция:

$id = Auth::id();
$users = User::with('profile')->where('id', '!=', $id )->inRandomOrder()->get();

Отношение по пользовательской модели

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

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

    public function blockers()
    {
        return $this->belongsToMany(User::class, 'blockers', 'leader_id', 'block_id')->withTimestamps();
    }

    public function blockings()
    {
        return $this->belongsToMany(User::class, 'blockers', 'block_id', 'leader_id')->withTimestamps();
    }

Блокировщики таблиц

Schema::create('blockers', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('block_id')->unsigned();
            $table->integer('leader_id')->unsigned();
            $table->timestamps();

            $table->foreign('block_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('leader_id')->references('id')->on('users')->onDelete('cascade');
        });

Таблица последователей

Schema::create('followers', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('follower_id')->unsigned();
            $table->integer('leader_id')->unsigned();
            $table->timestamps();

            $table->foreign('follower_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('leader_id')->references('id')->on('users')->onDelete('cascade');

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать метод запроса whereDoesntHave () , который будет проверять отсутствие связи.

Во-первых, вам нужно получить аутентифицированные user в настоящий момент.id.Затем, при каждой проверке вам нужно будет пройти этот id для использования в проверке.

Пример:

$user_id = Auth::user()->id;

$suggestions = User::whereDoesntHave('followers', function ($query) use ($user_id) {
        $query->where('follower_id', $user_id);
    })
    ->whereDoesntHave('blockings', function ($query) use ($user_id) {
        $query->where('block_id', $user_id);
    })
    ->whereDoesntHave('blockers', function ($query) use ($user_id) {
        $query->where('leader_id', $user_id);
    })
    ->get();
0 голосов
/ 19 сентября 2018

как я выяснил, у вас есть связь с вашим последователем UserModel, folloeing, blocker, blocking, но вы хотите выбрать пользователей, которые не имеют никаких отношений с этим пользователем, поэтому используйте WhereDosentHave, например:

$users =User::where(id, $id)->WhereDoesntHave('followers')
                             ->ORwhereDoesntHave('following')
                             ->ORwhereDoesntHave('blocker')
                             ->ORwhereDoesntHave('blocking')
                              ->get();

я не проверяю это, но я думаю, что работа просто проверить имя отношений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...