Bagaimana Anda membangun LIKE
kondisi dalam db_select()
kueri?
Saya tahu bagaimana melakukan ini dengan db_query()
panggilan API, tetapi apakah ada sintaks / metode khusus untuk melakukan ini db_select()
?
Bagaimana Anda membangun LIKE
kondisi dalam db_select()
kueri?
Saya tahu bagaimana melakukan ini dengan db_query()
panggilan API, tetapi apakah ada sintaks / metode khusus untuk melakukan ini db_select()
?
Jawaban:
Setelah menggali melalui Dokumentasi Drupal menemukan solusi di db_like halaman dokumentasi API dan SelectQuery: kondisi handler halaman doc ..
Sebagai contoh
$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();
Kondisi yang digunakan untuk permintaan serupa adalah
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
diperlukan untuk keluar dari argumen, dan (2) Anda perlu menambahkan karakter wildcard secara eksplisit. Ini juga akan menggunakan susunan standar pada database, dan saya tidak berpikir ada cara untuk menentukan yang berbeda.
Anda juga dapat menggunakan Drupal \ Core \ Database \ Database saat membuat kueri "LIKE". Ini adalah sintaks alternatif Drupal 8 karena db_select () tidak digunakan lagi.
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
Atau tambahkan beberapa dengan kueri ATAU.
$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();
Untuk menggunakan "like" di db_select
adalah seperti di bawah ini dan berfungsi untuk saya ...
$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();
Di sini nilai tepat di ROW1 adalah "testvalue@xmail.com" dan dengan menggunakan LIKE
kondisi di db_select
saya mendapat output sebagai "testvalue@xmail.com".
ini berfungsi di Drupal8 Versi 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);
}
Versi 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
sebagai tempat penampung argumen, Anda juga dapat meneruskan sebagai argumen...Query::condition
. Anda tidak akan menemukan dokumentasi untuk setiap operator untuk setiap jenis kueri yang berbeda, karena tidak masuk akal untuk melakukan itu. Semuanya berjalan melalui PDO pada akhir hari, jikadb_like
menyiapkan variabel dengan benardb_query
, maka dengan definisi itu akan menyiapkan variabel yang sama dengan benar untukdb_select