Wie baut man eine LIKE
Bedingung in einer db_select()
Abfrage auf?
Ich weiß, wie man das mit einem db_query()
API-Aufruf macht, aber gibt es eine spezielle Syntax / Methode dafür db_select()
?
Wie baut man eine LIKE
Bedingung in einer db_select()
Abfrage auf?
Ich weiß, wie man das mit einem db_query()
API-Aufruf macht, aber gibt es eine spezielle Syntax / Methode dafür db_select()
?
Antworten:
Nach dem Durchstöbern der Drupal-Dokumentation wurde eine Lösung in der db_like API-Dokumentationsseite und der SelectQuery: Condition- Handler- Dokumentationsseite gefunden .
Beispielsweise
$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();
Bedingung für eine ähnliche Abfrage ist
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
erforderlich ist, um das Argument ordnungsgemäß zu umgehen, und (2) dass Sie die Platzhalterzeichen explizit hinzufügen müssen. Es wird auch die Standardkollatierung für die Datenbank verwendet, und ich glaube, es gibt keine Möglichkeit, eine andere anzugeben.
Sie können auch Drupal \ Core \ Database \ Database verwenden, wenn Sie eine "LIKE" -Abfrage erstellen. Dies ist die alternative Drupal 8-Syntax, da db_select () veraltet ist.
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
Oder fügen Sie Mehrfache mit ODER-Abfrage hinzu.
$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();
Für die Verwendung von "like" in db_select
ist wie folgt und arbeitete für mich ...
$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();
Hier ist der genaue Wert in ROW1 "testvalue@xmail.com" und unter Verwendung der LIKE
Bedingung in habe db_select
ich die Ausgabe als "testvalue@xmail.com" erhalten.
es funktioniert in 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);
}
db_query
als Platzhalter für Argumente übergeben können, können Sie auch als Argument für zukünftige Verweise übergeben...Query::condition
. Sie finden keine Dokumentation für jeden einzelnen Operator für jeden Abfragetyp, da dies keinen Sinn macht. Alles geht am Ende des Tages durch PDO, wenndb_like
eine Variable korrekt vorbereitet wirddb_query
, dann wird per Definition dieselbe Variable korrekt vorbereitet fürdb_select