【发布时间】:2020-10-11 11:27:42
【问题描述】:
我有一个函数,我尝试在 2 列中搜索匹配的 id,但它始终返回 true,即使实际上没有结果。
我想搜索用户以前的关系,但不知道如何实现这个逻辑。
逻辑
- 我的表有 2 列
from_id和to_id(都将获取用户 ID) - 我正在向后端发送 2 个 ID(一个作为输入,另一个作为请求 标题)
- 我想说:where 输入
id是from_id并且header id 是to_id, ORwhere 输入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.'
]);
}
}
注意:这是我的older question 的后续。
知道是什么问题吗?
更新
基于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();
有意义吗?
【问题讨论】: