Уникальные записи в многомерном по ключу

У меня есть этот массив и я хочу получать только уникальные записи на основе ключа user_to

{
  "status": true,
  "result": {
    "unread_chat": 1,
    "chatlist": [
      {
        "id": 769,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 754,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 753,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 749,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 748,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 746,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 741,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 740,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 739,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 738,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 735,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 733,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 732,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 729,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 727,
        "user_id": 211,
        "user_to": 39,
        "chats": "hello",
        "is_read": false,
        "created_at": "2018-07-21 17:36:13",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 726,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 725,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": true,

        "unread_msg": 0
      },
      {
        "id": 679,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": true,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 678,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": true,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      },
      {
        "id": 677,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": true,
        "created_at": "2018-07-21 23:31:37",
        "online": false,

        "unread_msg": 0
      }
    ]
  }
}

Ниже приведен код, который я использовал.

    $messages = UserAdvertiserMessages::where(['user_id' => $user_id])
            ->orderBy('created_at', 'desc')
            ->skip($offset * $limit)
            ->take($limit)
            ->get();

Если бы я использовал ->unique('user_to'), я получил бы правильные результаты, но он добавил index. Итак, код для получения правильных результатов

$messages = UserAdvertiserMessages::where(['user_id' => $user_id])
        ->orderBy('created_at', 'desc')
        ->skip($offset * $limit)
        ->take($limit)
        ->get()->unique('user_to');

Выход

{
  "status": true,
  "result": {
    "unread_chat": 1,
    "chatlist": {
      "0": {
        "id": 769,
        "user_id": 211,
        "user_to": 210,
        "chats": "There?",
        "is_read": false,
        "created_at": "2018-07-21 23:31:37",
        "online": false,
        "unread_msg": 0
      },
      "1": {
        "id": 754,
        "user_id": 211,
        "user_to": 226,
        "chats": "yes",
        "is_read": true,
        "created_at": "2018-07-21 22:17:21",
        "online": false,

        "unread_msg": 0
      },
      "14": {
        "id": 727,
        "user_id": 211,
        "user_to": 39,
        "chats": "hello",
        "is_read": false,
        "created_at": "2018-07-21 17:36:13",
        "online": false,

        "unread_msg": 0
      }
    }
  }
}

Ваш отрывок - JSON, на самом деле не говорит нам, что содержит $ messages или где он используется. Я могу предположить, что индекс списка чатов представляет $ messages. Ваш код должен работать нормально.

Devon 21.07.2018 19:23

Вы пробовали: ['user_id' => $user_id, 'user_to' => $user_to]?

Lawrence Cherone 21.07.2018 19:26

Попробуйте $messages->values()->all();

NULL 21.07.2018 20:12

@LawrenceCherone: как видите, user_to может быть несколько, и у меня не было их идентификаторов.

silentcoder 22.07.2018 08:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
33
1

Ответы 1

попробуйте с этим отчетливый()

$messages = UserAdvertiserMessages::where(['user_id' => $user_id])
            ->orderBy('created_at', 'desc')
            ->skip($offset * $limit)
            ->take($limit)
            ->get()->distinct('user_to');

Другие вопросы по теме