У меня есть функция, в которой я пытаюсь выполнить поиск в 2 столбцах для совпадающего идентификатора, но всегда возвращает true
даже там, где на самом деле нет результата.
Я хочу искать предыдущие отношения пользователей, но не уверен, как сделать это logi c.
Logi c
- Моя таблица имеет 2 столбца
from_id
и to_id
(оба получат идентификаторы пользователей) - Я отправляю 2 идентификатора в серверную часть (один как входной, другой в заголовке запроса)
- Я хочу сказать: где вход
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();
имеет смысл?