Làm thế nào để bạn xây dựng một LIKE
điều kiện trong một db_select()
truy vấn?
Tôi biết cách thực hiện việc này với db_query()
lệnh gọi API, nhưng có một cú pháp / phương thức đặc biệt để thực hiện việc này với db_select()
không?
Làm thế nào để bạn xây dựng một LIKE
điều kiện trong một db_select()
truy vấn?
Tôi biết cách thực hiện việc này với db_query()
lệnh gọi API, nhưng có một cú pháp / phương thức đặc biệt để thực hiện việc này với db_select()
không?
Câu trả lời:
Sau khi đào bới Drupal Tài liệu tìm thấy một giải pháp trong db_like trang tài liệu API và SelectQuery: điều kiện trang doc xử lý ..
Ví dụ
$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();
Điều kiện để sử dụng cho truy vấn thích là
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
là cần thiết để thoát đúng đối số và (2) bạn cần thêm rõ ràng các ký tự đại diện. Nó cũng sẽ sử dụng đối chiếu mặc định trên cơ sở dữ liệu và tôi không nghĩ có bất kỳ cách nào để chỉ định một cách khác.
Bạn cũng có thể sử dụng Drupal \ Core \ Database \ Database khi tạo truy vấn "THÍCH". Đây là cú pháp thay thế Drupal 8 vì db_select () không được dùng nữa.
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
Hoặc thêm bội số với truy vấn OR.
$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();
Để sử dụng "like" trong db_select
như dưới đây và làm việc cho tôi ...
$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();
Ở đây giá trị chính xác trong ROW1 là "testvalue@xmail.com" và bằng cách sử dụng LIKE
điều kiện trong db_select
tôi đã nhận được đầu ra là "testvalue@xmail.com".
nó hoạt động trong Drupal8 Phiên bản 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);
}
Phiên bản 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
tư cách là người giữ chỗ đối số, bạn cũng có thể chuyển qua làm đối số...Query::condition
. Bạn sẽ không tìm thấy tài liệu cho từng toán tử riêng lẻ cho từng loại truy vấn khác nhau, vì sẽ không có ý nghĩa gì khi làm điều đó. Tất cả đều đi qua PDO vào cuối ngày, nếudb_like
chuẩn bị một biến chính xác chodb_query
, thì theo định nghĩa, nó sẽ chuẩn bị cùng một biến chính xác chodb_select