Проблема пов’язана зі спеціальним веб-сайтом із спеціальним полем для телефону. У ньому є місця. Одним із рішень є видалення пробілів під час попереднього збереження та обробка старих записів у БД, видаляючи пробіли.
Але іноді краще не чіпати те, що працює.
Завдання полягало в тому, щоб забезпечити пошук за телефонним фільтром у переглядах. У представленнях немає стандартних методів для пошуку з видаленими пробілами. У цьому випадку я знайшов рішення змінити запит.
Так, наприклад, значення поля телефону – «+354 566 32 56», і нам потрібно знайти його за допомогою пошуку в рядку «6632».
Цей код допоможе вам у цьому:
/**
* Implements hook_views_query_alter().
*
* @param ViewExecutable $view
* @param Sql $query
*/
function custommodule_views_query_alter(ViewExecutable $view, Sql $query) {
if ($view->id() == 'commerce_orders' && $view->current_display == 'orders') {
// Traverse through the 'where' part of the query.
foreach ($query->where as &$condition_group) {
foreach ($condition_group['conditions'] as &$condition) {
// Replace whitespaces from phone field.
if ($condition['operator'] == 'formula' && !empty(strpos($condition['field'], 'field_phone_number'))) {
$condition['field'] = preg_replace(['/CONCAT_WS/','/[)]/'], ['REPLACE(CONCAT_WS', "), ' ', '')"], $condition['field'] );
}
}
}
}
}