【问题标题】:Laravel - FriendshipLaravel - 友谊
【发布时间】:2015-07-01 17:07:24
【问题描述】:

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

  • 身份证
  • user_id
  • friend_id
  • 状态

重点是,我转到一个用户页面,我想看看我与这个用户的关系如何,4 个解决方案:

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

我想创建一个简单的方法来检查用户是否与其他人成为朋友。 我有一个“状态”列,它是一个布尔值(0 表示待处理,1 表示朋友) 对我来说完美的解决方案是能够以一种方法检查是否:

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

所以如果你能告诉我我错在哪里,这是我的逻辑(只是为了检查用户是否是朋友):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 删除了其他的不是吗?那么有什么办法呢?

我希望它很清楚,如果你能以一种干净的方式告诉我如何做到这一点,那就太好了。

【问题讨论】:

  • 看看这个系列..laracasts.com/series/build-a-laravel-app-from-scratch里面有一个关于朋友的课程
  • 你有点搞砸了,为什么你有一个 Friends 表?朋友不是用户?如果是这样,为什么您在用户表上没有多对多自我关系?
  • @bretterer 您需要订阅才能访问该视频。 (但如果你想了解laravel和php,这是一个非常好的投资9美元的方式)
  • 不,没有 Friends 表,只有一个 friends_user 来存储每个好友条目。我做了多对多,我可以获取我添加的用户,添加我的用户,但我无法获得与特定朋友的友谊状态,我无法将参数传递给我的方法。获取我添加的所有朋友的方法是: public function friendsOfMine() { return $this->belongsToMany('App\User', 'friends_user', 'user_id', 'friend_id') ->wherePivot('status', '=', 1) ->withPivot('status'); }

标签: php mysql laravel laravel-5


【解决方案1】:

这是一个常见的错误。当心你的“orWhere”条款。

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();
}

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多