显示除分配的用户外的所有用户。 Laravel 5.6

时间:2018-06-20 02:48:57

标签: php eloquent laravel-5.6

我有一个屏幕,其中 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

它是重复的,因为同一主题不能被多次分配。

先谢谢了。如果有人可以提供帮助,我将不胜感激。

1 个答案:

答案 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();