Nano Hash - криптовалюты, майнинг, программирование

laravel eloquent получает все распространенные чаты между несколькими пользователями

я работал над проектом чата в laravel
я хочу собрать все чаты, в которых участвуют несколько пользователей вместе
я прочитал документы о предложениях where, но не смог найти никакого решения для этой ситуации

я много искал, чтобы найти любую волшебную функцию, которая может делать то, что мне нужно, но я не мог найти никакой помощи

Связи:

user --------- one to many ---> chat
recipient ---- one to one ----> user
chat --------- one to many ----> recipient

скажем, у меня есть такая таблица

Таблица получателей

|--------------|----------------|----------------|
|      id      |     user_id    |     chat_id    |
|--------------|----------------|----------------|
|      1       |        1       |        2       |
|      2       |        2       |        2       |
|      3       |        3       |        2       |
|      4       |        3       |        1       |
|      5       |        2       |        3       |
|      6       |        2       |        1       |
|--------------|----------------|----------------|

я хочу получить chat_id, где пользователи [1,2,3]
должны участвовать в одном и том же чате

я ожидаю, что он вернется 2

// i tried this snippet but it's only returning the chats of a single user 
$user_id = $request->user()['id'];
return Chat::whereHas('recipients', function ($query) use ($user_id) {
    $query->where('user_id', $user_id);
})->get();
05.04.2019

  • какая связь между чатом и получателями? 05.04.2019
  • чат --- один ко многим ---› получатель 05.04.2019
  • я хотел предоставить изображение моей схемы БД, но она слишком беспорядочна с 15 таблицами, которые все связаны друг с другом. 05.04.2019

Ответы:


1

Используйте whereIn() и укажите количество строк:

$user_ids = [1, 2, 3];

return Chat::has('recipients', '=', count($user_ids))
    ->whereHas('recipients', function ($query) use ($user_ids) {
        $query->whereIn('user_id', $user_ids);
    }, '=', count($user_ids))->get();
05.04.2019
  • это очень близко, однако, когда я передаю [1, 3], он возвращает чат с идентификатором 2 ›› это должно вернуть ноль, потому что между 1 и 3 нет чата, это 1, 2 и 3, хотя проверка счетчика может это исправить как ты сделал, но это не так 06.04.2019
  • да сработало спасибо! можете ли вы объяснить, почему первый ответ не работал и почему это работает, я не могу понять большой разницы 06.04.2019
  • Первый запрос соответствовал чатам, которые содержат как минимум заданных пользователей, но могут также содержать и других. Новый запрос соответствует только тем чатам, которые точно содержат заданных пользователей. 06.04.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..