Laravel模型,正确简洁的方法


Laravel Model, Correct neat way of doing this

我有一个名为阻塞用户的表,它的布局是这样的。

id, user_id, blocked_user_id, reason, created_at, updated_at

现在我有了一个消息控制器,两个人可以进行对话。我希望在发送消息之前检查用户是否被阻止,我已经这样做了

    $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。将它们设置为一个数组,然后我单独针对每个数组,它非常完美,但我认为这是非常混乱的。

只是想知道如何才能做到这一点。

如果您想检查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';
}

就我个人而言,我不认为你的数据库设计是最好的方法,但这将满足你的需求。