我有一个屏幕,其中 admin 添加主题,数据库名称为 chat_topics
(ID,标题,状态),然后在编辑主题屏幕中,有两个列表,其中包含可用用户和已分配用户。
管理员分配用户时,它保存在数据透视表中, chat_topic_user
(chat_topic_id,users_id)
现在,可以将一个用户分配给多个主题。我可以为用户分配主题,然后在编辑屏幕中显示该特定主题的所有分配用户。
当我分配一个特定用户时出现问题,它甚至在不应该显示的可用用户中显示,例如,如果 userA 被分配给 TopicA ,然后将 TopicA分配给编辑屏幕,它不应在可用用户中显示 userA 。
但是 userA 应该显示在 TopicB 编辑编辑屏幕上。
我希望我足够清楚地解释这个问题。
显示所有可用用户的代码:
User::with('chat_topics')->get()
(如果 userA 被分配给 TopicA ,则 userA 不应显示在可用用户中,但应为< strong> TopicB 可用列表)
仅显示特定主题上分配的用户的代码
User::has('chat_topics')->whereHas('chat_topics', function ($query) use ($topic_id) { $query->where('id', $topic_id); })->get();
我想要这样的东西:
主题编辑屏幕
-分配的用户
用户a
用户b
可用用户
空(如果数据库中只有两个用户)主题B编辑屏幕
-分配的用户
空的
可用用户
用户a
用户b
当前显示如下:
主题编辑屏幕
-分配的用户
用户a
用户b
-可用用户
用户a
用户b
它是重复的,因为同一主题不能被多次分配。
先谢谢了。如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:1)
根据您的代码:
$assignedUsers = User::has('chat_topics')->whereHas('chat_topics', function ($query) use ($topic_id) { $query->where('id', $topic_id); })->get();
// get the list of assigned userIds
$assignedIds = $assignedUsers->pluck('id');
// get the list of available user excerpt users in $assignedUsers
$availableUsers = User::with('chat_topics')->whereNotIn('id', $assignedIds)->get();