Как я могу найти дубликаты телефонов из столбца 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();
Это не работает. Любая помощь будет оценена по достоинству. заранее спасибо
Введите код ниже, чтобы увидеть список повторяющихся результатов по телефону. Я надеюсь, что это сработает для вас.
$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();
В вопросе поиск дубликатов результатов в 1 основном запросе. я присоединился к еще одному для определенных повторяющихся записей основного запроса.
Комментарий добавлен внутри кода
Извините за поздний ответ. Я начинаю тестировать ваше решение прямо сейчас.
Я только что протестировал, и это сработало. Спасибо :)
@ 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
в...
Проблема устранена заменой DB::raw('recipient->>"$.phone"') на DB::raw('json_unquote(json_extract(recipient, "$.phone"))')
если приведенное выше решение не помогло, создайте фиктивные данные и какой результат вы ожидали, то есть отредактируйте свой вопрос, тогда я дам вам правильный результат