web-dev-qa-db-fra.com

Comment créer une condition LIKE dans une requête db_select ()?

Comment créer une condition LIKE dans une requête db_select() ?

Je sais comment faire cela avec un appel API db_query() , mais existe-t-il une syntaxe/méthode spéciale pour le faire avec db_select()?

14
Anil Sagar

Après avoir fouillé dans Drupal Documentation a trouvé une solution dans db_like page de documentation API et SelectQuery: condition page doc du gestionnaire ..

Par exemple

$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();

La condition à utiliser pour une requête similaire est

->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
21
Anil Sagar

Pour utiliser "like" dans db_select est comme ci-dessous et a fonctionné pour moi ...

$search_value = "[email protected]";
$query = db_select('TABLE NAME', 'u');
$query->fields('u', ['ROW1', 'ROW2']);
$query->condition('ROW1', '%' . db_like($search_value) . '%', 'LIKE');
$result = $query->execute();

Ici, la valeur exacte dans ROW1 est "[email protected]" et en utilisant la condition LIKE dans db_select J'ai obtenu la sortie sous "[email protected]".

1
lakshmi naresh

Vous pouvez également utiliser Drupal\Core\Database\Database lors de la création d'une requête "LIKE". Ceci est Drupal 8 syntaxe alternative car db_select () est déconseillé.

$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
    ->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');

Ou ajoutez des multiples avec OR requête.

$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();
1
Johann

cela fonctionne dans Drupal8 Version 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);
}

Version 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);
}