आप LIKE
एक db_select()
प्रश्न में एक शर्त का निर्माण कैसे करते हैं ?
मुझे पता है कि db_query()
एपीआई कॉल के साथ यह कैसे करना है , लेकिन क्या ऐसा करने के लिए एक विशेष वाक्यविन्यास / विधि है db_select()
?
आप LIKE
एक db_select()
प्रश्न में एक शर्त का निर्माण कैसे करते हैं ?
मुझे पता है कि db_query()
एपीआई कॉल के साथ यह कैसे करना है , लेकिन क्या ऐसा करने के लिए एक विशेष वाक्यविन्यास / विधि है db_select()
?
जवाबों:
Drupal प्रलेखन के माध्यम से खुदाई करने के बाद db_like एपीआई प्रलेखन पृष्ठ और SelectQuery में एक समाधान मिला : हालत हैंडलर डॉक्टर पृष्ठ ।।
उदाहरण के लिए
$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();
क्वेरी की तरह उपयोग करने के लिए शर्त है
->condition('field_name_value', '%' . db_like($last_item) . '%', 'LIKE')
db_like()
तर्क को ठीक से चलाने के लिए आवश्यक है, और (2) आपको वाइल्डकार्ड वर्णों को स्पष्ट रूप से जोड़ना होगा। यह डेटाबेस पर डिफ़ॉल्ट कोलाजेशन का भी उपयोग करेगा, और मुझे नहीं लगता कि किसी भिन्न को निर्दिष्ट करने का कोई तरीका है।
"LIKE" क्वेरी बनाते समय आप Drupal \ Core \ Database \ डेटाबेस का भी उपयोग कर सकते हैं। यह db_select () पदावनत होने के बाद से Drupal 8 वैकल्पिक सिंटैक्स है।
$database = Database::getConnection();
$query = $database->select('TABLE NAME', 'u')
->fields('u', array('column1','column2'));
$query->condition('column1', '%'.$database->escapeLike($search_phrase) . '%', 'LIKE');
या 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();
"जैसे" का उपयोग करने के लिए db_select
नीचे है और मेरे लिए काम कर रहा है ...
$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();
यहाँ ROW1 का सटीक मान "testvalue@xmail.com" है और इसमें LIKE
शर्त का उपयोग करके db_select
मुझे "testvalue@xmail.com" के रूप में आउटपुट मिला।
यह Drupal8 संस्करण 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);
}
संस्करण 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
एक तर्क प्लेसहोल्डर के रूप में पारित कर सकते हैं , आप एक तर्क के रूप में भी पारित कर सकते हैं...Query::condition
। आपको प्रत्येक अलग-अलग प्रकार के प्रश्न के लिए प्रत्येक अलग-अलग ऑपरेटर के लिए प्रलेखन नहीं मिलेगा, क्योंकि यह ऐसा करने के लिए समझ में नहीं आएगा। यह सब दिन के अंत में पीडीओ माध्यम से चला जाता है, अगरdb_like
एक चर के लिए सही ढंग से तैयार करता हैdb_query
, तो परिभाषा के द्वारा इसके लिए सही ढंग से एक ही चर तैयार करेंगेdb_select