Nasıl bir yukarı yaratırım LIKE
bir de koşul db_select()
sorguda?
Bunu bir db_query()
API çağrısı ile nasıl yapacağımı biliyorum , ama bunu yapmak için özel bir sözdizimi / yöntem var db_select()
mı?
Nasıl bir yukarı yaratırım LIKE
bir de koşul db_select()
sorguda?
Bunu bir db_query()
API çağrısı ile nasıl yapacağımı biliyorum , ama bunu yapmak için özel bir sözdizimi / yöntem var db_select()
mı?
Yanıtlar:
Drupal Documentation üzerinden kazdıktan sonra db_like API dokümantasyon sayfasında ve SelectQuery: koşul işleyici doküman sayfasında bir çözüm bulundu .
Örneğin
$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();
Benzer sorgu için kullanılacak koşul:
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
edilmesi gereken iki şey, (1) argümanından düzgün bir şekilde kaçmak için gerekli olması ve (2) joker karakterleri açıkça eklemeniz gerektiğidir. Ayrıca veritabanında varsayılan harmanlama kullanır ve farklı bir belirtmek için herhangi bir yolu olduğunu sanmıyorum.
"LIKE" sorgusu oluştururken Drupal \ Core \ Database \ Database'i de kullanabilirsiniz. Db_select () kullanımdan kaldırıldığı için bu Drupal 8 alternatif sözdizimidir.
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
Veya OR sorgusuyla katları ekleyin.
$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();
"Gibi" kullanmak db_select
için aşağıdaki gibidir ve benim için çalıştı ...
$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();
Burada ROW1 tam değeri "testvalue@xmail.com" ve LIKE
koşul kullanarak db_select
"çıktı" testvalue@xmail.com "çıktı.
Drupal8 Sürüm 1'de çalışır
$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);
}
Versiyon 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
bağımsız değişken olarak da iletebilirsiniz...Query::condition
. Bunu yapmak anlamlı olmayacağından, her farklı türde sorgu için her bir işleç için belge bulamazsınız. Her şey günün sonunda PDO'dan geçer, eğerdb_like
bir değişkeni doğru bir şekilde hazırlarsadb_query
, tanım gereği aynı değişkeni doğru bir şekilde hazırlayacaktırdb_select