Laravel模型,正确的做法

时间:2016-08-04 23:29:21

标签: php laravel

我有这个名为被阻止用户的表,它的布局就像这样。

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。将它们设置为一个数组,我然后单独定位每一个,它完美,但我相信这是非常混乱。

只是想知道如何以正确和最好的方式来做这件事。

1 个答案:

答案 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';
}

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