Laravel условный запрос - PullRequest
0 голосов
/ 21 июня 2020

У меня есть функция, в которой я пытаюсь выполнить поиск в 2 столбцах для совпадающего идентификатора, но всегда возвращает true даже там, где на самом деле нет результата.

Я хочу искать предыдущие отношения пользователей, но не уверен, как сделать это logi c.

Logi c

  1. Моя таблица имеет 2 столбца from_id и to_id (оба получат идентификаторы пользователей)
  2. Я отправляю 2 идентификатора в серверную часть (один как входной, другой в заголовке запроса)
  3. Я хочу сказать: где вход id это from_id и идентификатор заголовка to_id, ИЛИ, где ввод id равен to_id, а заголовок id равен from_id возвращает результат, в противном случае очевидно, что это null.

Код

public function check(Request $request) { // always return true!
        $user = $request->user();
        $userInput = $request->input('receiverId');
        $chat = PrivateChat::where(function ($query) use ($user) {
            $query->where('from_id', $user->id)->orWhere('to_id', $user->id);
        })->orWhere(function ($query) use ($userInput) {
            $query->where('from_id', $userInput)->orWhere('to_id', $userInput);
        })->first();

        $receiver = User::where('id', $request->input('receiverId'))->first();

        if($chat) {
            return response()->json([
                'data' => new PrivateChatResource($chat),
                'exist' => true,
                'receiver' => new UserResource($receiver),
                'message' => 'Chat data retrieved successfully.'
            ]);
        } else {
            return response()->json([
                'exist' => false,
                'receiver' => new UserResource($receiver),
                'message' => 'Chat data retrieved successfully.'
            ]);
        }
}

Примечание: это продолжение моего старого вопроса .

Любая идея в чем проблема?

Обновление

На основе комментария Giacomo M, я думаю, это должен быть окончательный код

$chat = PrivateChat::where(function ($query) use ($user, $userInput) {
            $query
                ->where('from_id', $user->id)
                ->where('to_id', $userInput);
        })->orWhere(function ($query) use ($user, $userInput) {
            $query
                ->where('from_id', $userInput)
                ->where('to_id', $user->id);
        })->first();

имеет смысл?

1 Ответ

0 голосов
/ 21 июня 2020

Вы также используете orWhere в подзапросах, но в соответствии с вашим логом c вам нужно AND в подзапросах.

Ваш запрос выглядит следующим образом:

$chat = PrivateChat::where(function ($query) use ($user) {
    $query
        ->where('from_id', $user->id)
        ->where('to_id', $user->id); // where, NOT orWhere
})->orWhere(function ($query) use ($userInput) {
    $query
        ->where('from_id', $userInput)
        ->where('to_id', $userInput); // where, NOT orWhere
})->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...