красноречивая коллекция - уникальное поле в отношениях - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть модель пользователя и модель команды, и в команде может быть много пользователей (принадлежащих к одной связи).Теперь мне нужно извлечь список всех пользователей из команд, членом которых является зарегистрированный пользователь.

У меня есть код ниже:

$teams = $user->teams()->get()->pluck('id')->toArray();

    return Team::whereIn('id', $teams)->with(['users'])->get()->map(function ($item) {
        return $item->users->map(function ($user) {
            return [
                'name' => $user->name,
                'email' => $user->email,
            ];
        });
    });

Выше возвращает коллекцию, подобную приведенной ниже:

Collection {#375 ▼
  #items: array:2 [▼
    0 => array:3 [▼
      0 => array:2 [▼
        "name" => "John Doe",
        "email" => "john.doe@mail.com"
      ]
      1 => array:2 [▼
        "name" => "Jane Doe",
        "email" => "jane.doe@mail.com"
      ]
      2 => array:2 [▶]
    ]
    1 => array:2 [▼
      0 => array:2 [▼
        "name" => "Jane Doe"
        "email" => "jane.doe@mail.com"
      ]
      1 => array:2 [▼
        "name" => "John Doe",
        "email" => "john.doe@mail.com"
      ]
    ]
  ]
}

Вот лучшее представление:

[
  [
    {
      "name": "John Doe",
      "email": "john.doe@mail.com"
    },
    {
      "name": "Jane Doe",
      "email": "jane.doe@mail.com"
    },
    {
      "name": "John Doe",
      "email": "john.doe@mail.com"
    }
  ],
  [
    {
      "name": "Jane Doe",
      "email": "jane.doe@mail.com"
    },
    {
      "name": "John Doe",
      "email": "john.doe@mail.com"
    }
  ]
]

Как видите, у меня есть дубликаты, мне нужно от них избавиться.Я пытался использовать разные и уникальные без успеха.

1 Ответ

0 голосов
/ 15 января 2019

Я частично решил эту проблему с помощью цикла foreach, но предпочел бы получить эти данные с помощью красноречивого запроса.

$userArray = array();
    foreach ($users as $user) {
        if (array($user)) {
            foreach ($user as $u) {
                $userArray[] = $u['email'];
            }
        } else {
            $userArray[] = $user['email'];
        }
    }
    return array_unique($userArray);
...