【问题标题】:Friendship between users in Laravel 4Laravel 4 中用户之间的友谊
【发布时间】:2014-06-29 15:53:31
【问题描述】:

我创建了模型,以便用户可以成为朋友。我有存储 user_id 和friend_id 的表 user_friends 。问题是,它只能单向工作。如果用户 1 将用户 2 添加为好友,则用户 2 将成为用户 1 的好友,但不会反向(用户 1 的用户 2 的好友),我该如何完成这样的事情?

用户模型

   public function friends()
{
    return $this->belongsToMany('User','user_friends','user_id','friend_id');
}

和 User_Friend 模型

public function user()
{
    return $this->belongsToMany('User');
}

寻找朋友

 $friends = User::find($user->id)->friends;

以及我保存新友谊的控制器的一部分

$friendData = array('user_id' => $invite->id,); //$invite is result of $invite->save()
        $friend = User::find($user->id)->friends()->attach($friendData);

【问题讨论】:

  • 我不熟悉有问题的框架,但您可以执行类似...SELECT friend_id FROM user_friends WHERE user_id = ? UNION SELECT user_id FROM user_friends WHERE friend_id = ? 的操作。这应该会给你一个所有朋友的列表,不管链接是哪条路。
  • 这是一种解决方案。但是 Laravel 和 Eloquent 使用不同的方法。对不起,我不能接受你的回答。
  • 没问题,我知道这不是您想要的解决方案,这就是为什么它不是答案,只是评论。

标签: php laravel-4 eloquent relationship


【解决方案1】:

您可以做的一件事是存储和反向关系。

$friendData = ['user_id' => $invite->id];

$user = User::find($user->id);
$user->friends()->attach($friendData);

$friend = User::find($invite->id);
$friend->friends()->attach($user);

否则你可能会检索到反向关系

public function reverseFriends()
{
    return $this->hasManyThrough('User', 'User_Friend', 'friend_id', 'user_id');
}

然后合并两个集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2016-11-30
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多