首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拉勒维尔友谊

拉勒维尔友谊
EN

Stack Overflow用户
提问于 2015-04-23 13:19:26
回答 1查看 1.3K关注 0票数 5

我试着用laravel 5建立一个友谊系统,结果我被困住了。我有一个friends_user表,如下所示:

  • id
  • user_id
  • friend_id
  • 状态

这里是重点,我去了一个用户页面,我想看看我和这个用户的关系,4种解决方案:

  • 我们是朋友
  • 我们不是
  • 他还没有接受这个请求
  • 我得确认一下。

我想要创建一个方法来检查一个用户是否是另一个朋友,很简单。我有一个“status”列,它是一个布尔值(0表示挂起,1表示朋友),对我来说最好的解决方案是能够在一种方法中检查以下情况:

  • 用户是朋友,所以无论是‘user_id’,Auth::user()->id)->and (' friend _id',$friend->id)还是逆('user_id',$friend->id)->and ('friend_id',Auth::user()->id),它都必须检查两种含义。
  • 我发出请求,等待他的答复。
  • 我收到了这个请求,不得不接受它。
  • 我们不是朋友所以我可以加上他。

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

代码语言:javascript
运行
复制
    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会擦除其他的,不是吗?解决办法是什么?

我希望这是明确的,如果你能告诉我如何做到这一点,这将是很好的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-23 15:00:50

这是个常见的错误。小心你的"orWhere“条款。

代码语言:javascript
运行
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29824713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档