Найдите дубликат телефона из столбца JSON с помощью командыwhereIn в Laravel

Как я могу найти дубликаты телефонов из столбца json с помощью командыwhereIn в Laravel. Ниже мой код?

    // Orders table migration
    $table->json("recipient")->nullable();

    // Data castings in Order Model
    protected $casts = [
        "recipient" => "array"
    ];

    // Order created
    $order = Order::create([
        "recipient" => [
            "phone" => "1234424532",
            "email" => "[email protected]"
        ],
        "status"  => "completed"
    ]);

    // Try to retrieve the recipients with duplicate phone numbers
    $query = Order::query();
    return $query->select('id', 'recipient')
        ->whereNotNull('recipient')
        ->whereIn('recipient->phone', function ($subQuery) {
            $subQuery->select('recipient->phone AS phone')
                ->from('orders')
                ->groupBy('phone')
                ->havingRaw('COUNT(*) > 1');
        })->paginate();

Это не работает. Любая помощь будет оценена по достоинству. заранее спасибо

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Введите код ниже, чтобы увидеть список повторяющихся результатов по телефону. Я надеюсь, что это сработает для вас.

$query = Order::query();
    //get all duplicate phone from json
    $duplicates = DB::table('orders')
        ->select(DB::raw('recipient->>"$.phone" as phone'))
        ->groupBy('phone')
        ->havingRaw('COUNT(*) > 1');
    
    //match all record with duplicate record
    return $query->select('id', 'recipient')
        ->joinSub($duplicates, 'duplicate_phones', function ($join) {
            $join->on(DB::raw('recipient->>"$.phone"'), '=', 'duplicate_phones.phone');
        })
        ->paginate();

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

Zealous System 19.06.2024 08:24

В вопросе поиск дубликатов результатов в 1 основном запросе. я присоединился к еще одному для определенных повторяющихся записей основного запроса.

Zealous System 19.06.2024 08:30

Комментарий добавлен внутри кода

Zealous System 19.06.2024 08:41

Извините за поздний ответ. Я начинаю тестировать ваше решение прямо сейчас.

Leslie Joe 19.06.2024 10:03

Я только что протестировал, и это сработало. Спасибо :)

Leslie Joe 19.06.2024 10:06

@ Zealous System Здравствуйте, это работало локально, но не в производственной среде. Я получил синтаксическую ошибку: производство.ОШИБКА: SQLSTATE[42000]: Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '>>"$.phone" = duplicate_phones.phone, где status в (?, ?, ?) и внутреннее соединение cre...' at line 1 (Connection: mysql, SQL: select count(*) as aggregate from orders (выберите json_unquote(json_extract (recipient, '$.phone'')) как phone откуда orders где status в...

Leslie Joe 19.06.2024 12:46

Проблема устранена заменой DB::raw('recipient->>"$.phone"') на DB::raw('json_unquote(json_extract(recipient, "$.phone"))')

Leslie Joe 19.06.2024 13:42

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