Laravel - 友谊

时间:2015-04-23 13:19:26

标签: php mysql laravel laravel-5

我正试图在laravel 5中建立一个友谊系统而且我被困住了。 我有一个friends_user表,如下所示:

  • ID
  • USER_ID
  • friend_id
  • 状态

关键是,我转到用户页面,我想知道我与这个用户的关系,4个解决方案:

  • 我们是朋友
  • 我们不是
  • 他还没有接受请求
  • 我必须确认与否。

我想创建一个方法来检查用户是否是另一个用户的朋友,简单。 我有一个'status'列,它是一个布尔值(0表示挂起,1表示朋友) 对我来说完美的解决方案是能够用一种方法检查是否:

  • 用户是朋友,所以要么('user_id',Auth :: user() - > id) - >和('friend_id',$ friend-> id)或反向('user_id', $ friend-> id) - >和('friend_id',Auth :: user() - > id),它必须检查2种感官
  • 我发送了请求并且必须等待他的回答
  • 我收到了请求,必须接受。
  • 我们不是朋友,我可以加他。

所以,如果你能告诉我这里我错在哪里,这是我的逻辑(只是为了检查用户是否是朋友):User.php

    public function isFriend($slug)
{
    // Get both user
    $user = Auth::user();
    $receiver = User::where('slug', $slug)->first();
    // get list of friends (so who have status = 1)
    $result = Friends::where('status', 1);
    // Get users where user id is equal to connected
    $result = $result->where('user_id', $user->id)->where('friend_id', $receiver->id);
    $result = $result->orWhere('user_id', $receiver->id)->where('friend_id', $user->id);
    $result = $result->get();
    if(count($result) == 0)
        return false;
    return true;
}

在我的观点中进行这些检查后。

这很有效,但是只有当我(当前用户)发送了请求但是如果它是反向的,即使状态为0,它也会返回给我用户。我认为我的$ result擦掉了其他的不是吗?解决方案是什么?

我希望它很清楚,如果你能以干净的方式告诉我这是怎么做的,那就太好了。

1 个答案:

答案 0 :(得分:3)

这是一个常见的错误。小心你的"或者"条款。

public function isFriend($slug)
{
    // Get both user
    $user = Auth::user();
    $receiver = User::where('slug', $slug)->first();
    // get list of friends (so who have status = 1)

    $result = Friends::where('status',1)->where(function($query) use ($receiver,$user)
    {
        $query->where([
            'user_id'   => $user->id,
            'friend_id' => $receiver_id
        ])->orWhere([
            'user_id'   => $receiver->id,
            'friend_id' => $user->id
        ]);

    })->get();

    return ! $result->isEmpty();
}