Как вы строите LIKE
условие в db_select()
запросе?
Я знаю, как сделать это с помощью db_query()
вызова API, но есть ли специальный синтаксис / метод для этого db_select()
?
Как вы строите LIKE
условие в db_select()
запросе?
Я знаю, как сделать это с помощью db_query()
вызова API, но есть ли специальный синтаксис / метод для этого db_select()
?
Ответы:
После изучения Drupal Documentation было найдено решение на странице документации по API db_like и на странице документации по обработчику условий .
Например
$result = db_select('field_data_field_name', 'f')->fields('f', array(
'entity_id',
'field_name_value'
))
->condition('entity_type', 'user')
->condition('bundle', 'user')
->condition('deleted', 0)
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
->distinct()
->range(0, 10)
->execute();
Условие для использования в качестве запроса
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
необходимо для правильного экранирования аргумента, и (2) вам необходимо явно добавить символы подстановки. Он также будет использовать параметры сортировки по умолчанию для базы данных, и я не думаю, что есть какой-либо способ указать другой.
Вы также можете использовать Drupal \ Core \ Database \ Database при создании запроса "LIKE". Это альтернативный синтаксис Drupal 8, поскольку db_select () устарела.
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
Или добавить кратные с запросом ИЛИ.
$DB_OR = $query->orConditionGroup()
// find match anywhere in field
->condition('column1', '%' . $database->escapeLike($search_phrase) . '%', 'LIKE')
// find match starting at beginning
->condition('column2', $database->escapeLike($search_phrase) . '%', 'LIKE');
// find match at end of field
->condition('column1', '%' . $database->escapeLike($search_phrase), 'LIKE')
$query->condition($DB_OR); // Add OR object as condition
$result = $query->execute();
Для использования «как» в db_select
том, как показано ниже, и работал для меня ...
$search_value = "testvalue@xmail.com";
$query = db_select('TABLE NAME', 'u');
$query->fields('u', ['ROW1', 'ROW2']);
$query->condition('ROW1', '%' . db_like($search_value) . '%', 'LIKE');
$result = $query->execute();
Здесь точное значение в ROW1 - «testvalue@xmail.com», и, используя LIKE
условие, db_select
я получил вывод «testvalue@xmail.com».
это работает в Drupal8 версии 1
$exp = "1";
$connection = \Drupal::database();
$query = $connection ->select('node', 'n');
$query->fields('n');
$query->condition('nid', '%'.db_like($exp), 'LIKE');
$records = $query->execute();
foreach ($records as $record) {
ksm($record);
}
Версия 2
$connection = \Drupal::database();
$query = $connection->query("SELECT *FROM {node} WHERE nid like '%' :nid '%'", [
':nid' => "1",
]);
$records = $query->fetchAll();
foreach ($records as $record) {
ksm($record);
}
db_query
в качестве заполнителя аргумента, вы также можете передать в качестве аргумента...Query::condition
. Вы не найдете документацию для каждого отдельного оператора для каждого типа запроса, так как это не имеет смысла делать. Все это проходит через PDO в конце дня, еслиdb_like
правильно подготавливает переменнуюdb_query
, то по определению она правильно подготавливает эту переменную дляdb_select