我有这个名为被阻止用户的表,它的布局就像这样。
id, user_id, blocked_user_id, reason, created_at, updated_at
现在我有一个消息控制器,2个人可以交谈。我希望在发送消息之前检查用户是否被阻止,我已经这样做了。
$blkchk = $thread->participants()->withTrashed()->get();
foreach ($blkchk as $usr) {
$usrs[] = $usr->user_id;
}
$block = BlockedUsers::where('user_id',$usrs[0] )->where('blocked_user_id', $usrs[1])->first();
$block2 = BlockedUsers::where('user_id',$usrs[1])->where('blocked_user_id', $usrs[0])->first();
if (!empty($block) || !empty($block2)) {
return response()->view('errors.403', ['error' => 'One of the users in this conversation is blocked.'], 404);
}
这非常混乱,但blkchk在对话中获得了两个用户ID。将它们设置为一个数组,我然后单独定位每一个,它完美,但我相信这是非常混乱。
只是想知道如何以正确和最好的方式来做这件事。
答案 0 :(得分:1)
如果您想检查blocked_users
表中是否存在特定条目,您可以同样使用whereIn()
方法:
$blockedUsers = BlockedUsers::whereRaw(
'user_id = ? AND blocked_user_id = ?', [$usrs[0], $usrs[1]]
)
->orWhereRaw(
'user_id = ? AND blocked_user_id = ?', [$usrs[1], $usrs[0]]
);
if ($blockedUsers->count()) {
return 'Some of the users are blocked';
}
就个人而言,我认为您的数据库设计不是最好的方法,但这可以满足您的需求。