Db_select () क्वेरी में LIKE की स्थिति कैसे बनाते हैं?


14

आप LIKEएक db_select()प्रश्न में एक शर्त का निर्माण कैसे करते हैं ?

मुझे पता है कि db_query()एपीआई कॉल के साथ यह कैसे करना है , लेकिन क्या ऐसा करने के लिए एक विशेष वाक्यविन्यास / विधि है db_select()?


2
बस भविष्य के संदर्भ के लिए, कुछ भी जिसे आप db_queryएक तर्क प्लेसहोल्डर के रूप में पारित कर सकते हैं , आप एक तर्क के रूप में भी पारित कर सकते हैं ...Query::condition। आपको प्रत्येक अलग-अलग प्रकार के प्रश्न के लिए प्रत्येक अलग-अलग ऑपरेटर के लिए प्रलेखन नहीं मिलेगा, क्योंकि यह ऐसा करने के लिए समझ में नहीं आएगा। यह सब दिन के अंत में पीडीओ माध्यम से चला जाता है, अगर db_likeएक चर के लिए सही ढंग से तैयार करता है db_query, तो परिभाषा के द्वारा इसके लिए सही ढंग से एक ही चर तैयार करेंगेdb_select
क्लाइव

2
इससे पहले कि कोई भी इसे सुझाए, जब तक आप db_select + LIKE के बारे में सवाल नहीं उठा सकते, मुझे नहीं लगता कि हमारे पास इसका कोई डुप्लिकेट है। हमारे पास, db_query + LIKE है, लेकिन फिर भी उत्तर एक ही है, प्रश्न अलग है।
mpdonadio

जवाबों:


21

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')

2
यहाँ ध्यान देने योग्य दो बातें हैं (1) db_like()तर्क को ठीक से चलाने के लिए आवश्यक है, और (2) आपको वाइल्डकार्ड वर्णों को स्पष्ट रूप से जोड़ना होगा। यह डेटाबेस पर डिफ़ॉल्ट कोलाजेशन का भी उपयोग करेगा, और मुझे नहीं लगता कि किसी भिन्न को निर्दिष्ट करने का कोई तरीका है।
mpdonadio

1
मैं इसे थोड़ा और व्यापक बनाने के लिए आज बाद में पास ले सकता हूं। मैं डीबी एपीआई को कभी याद नहीं कर सकता, और कल सचमुच यही बात देख रहा था।
mpdonadio

1

"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_like ()" के बजाय डेटाबेस फ़ंक्शन (एस्केपलाइक) में बनाया गया है। साथ ही तीनों संभावनाओं का भी जिक्र किया।
ssibal

1

"जैसे" का उपयोग करने के लिए 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" के रूप में आउटपुट मिला।


0

यह 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);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.