【发布时间】:2020-07-30 23:46:47
【问题描述】:
我有两个表用户和关系。关系表包含下一个字段:
id | user_one_id (fk to users) | user_two_id (fk to users) | status | action_user_id
状态字段可以是 4 个值之一。 0 - 待处理,1 - 接受,2 - 拒绝,3 - 阻止。
操作用户是那些创建或更新请求的用户。例如,id 为 1 的用户想与 id 为 2 的用户成为朋友。action_user_id 将为 1。
我无法在我的用户模型中组织关系。
例如我的方法朋友
public function friends()
{
return $this->belongsToMany(User::class, 'relationships', 'id', 'user_one_id')
->orWhere('user_two_id', $this->id);
}
创建下一个 sql 查询:
select * from "users" inner join "relationships" on "users"."id" = "relationships"."user_one_id" where "relationships"."user_one_id" = ? or "user_two_id" = ?
但我明白这不是我需要的。
我需要什么?我需要 3 个方法“朋友”、“请求”和“黑名单”。
“friends”方法必须返回当前用户的所有好友。 “requested”方法必须将所有好友请求返回给当前用户。并且“黑名单”必须返回当前用户处于被屏蔽状态的所有用户。
【问题讨论】:
-
在关系表中,是不是像user_one_id的用户向user_two_id的用户发送请求一样?与
The "requested" method must return all friend requests to current user.一样,这意味着获取所有 user_two_id id,其中 user_one_id 属于给定用户并且请求状态?另外,如果你能用 user_one_id、user_two_id 来解释所有这些关系,那就太好了。 -
user_one_id 和 user_two_id 只是用户表的外键。至于“请求”,我的意思是从其他想要成为朋友的用户那里获得所有请求。
-
假设这是来自关系表 user_one_id
1, user_two_id6, statusrequested的条目。现在这是什么意思,1 向 6 发送请求,或 6 向 1 发送请求? -
我忘了描述关系数据库中名为 action_user_id 的一个字段。我纠正它。
-
假设 1 向 6 发送请求,那么 action_id 将为 1,如何将 1,6 分配给 user_one_id,user_two_id。我的意思是你应该将 1 分配给 user_one_id 还是 user_two_id?