जवाबों:
मुझे नहीं लगता कि एपीआई में कुछ भी बनाया गया है, लेकिन एक चुटकी में आप सीधे डेटाबेस को क्वेरी कर सकते हैं:
$entity_type = 'node';
$bundle = 'page';
$nids = array(1, 2, 3);
$field_values = db_select('field_revision_FIELD_NAME', 'f')
->fields('f', array('entity_id', 'FIELD_NAME_value'))
->condition('entity_type', $entity_type)
->condition('bundle', $bundle)
->condition('entity_id', $nids, 'IN')
->condition('deleted', 0)
->execute()
->fetchAllKeyed();
यह चलाने के बाद कि आपके पास क्षेत्र मानों की एक सरणी होनी चाहिए, उनके संबंधित नोड्स के द्वारा दर्ज की गई।
यह याद रखने योग्य है कि कॉलम नाम जरूरी नहीं होगा FIELD_NAME_value
; उदाहरण के लिए एक नोड संदर्भ क्षेत्र का एक कॉलम नाम होगा FIELD_NAME_nid
। आप किसका उपयोग करते हैं यह आपके क्षेत्र के प्रकार पर निर्भर करेगा।
अपडेट करें
ऐसा लगता है कि एपीआई के साथ ऐसा करने का एक तरीका है, लेकिन यह सुंदर नहीं है और इसमें अभी भी एक मैनुअल क्वेरी शामिल है:
// Get the field meta data for the field_id.
$field_name = 'field_something';
$field_info = field_info_field($field_name);
$field_id = $field_info['id'];
// Load up the properties from the node table.
$nids = array(1, 2, 3);
$sql = 'SELECT * FROM {node} WHERE nid IN (:nids)';
$nodes = db_query($sql, array(':nids' => $nids))->fetchAllAssoc('nid');
// Attach the single field to all nodes.
field_attach_load('node', $nodes, FIELD_LOAD_CURRENT, array('field_id' => $field_id));
वह विधि डेटा के लिए डेटा लोड करने के लिए फ़ील्ड आईडी निर्दिष्ट करके $options
पैरामीटर का लाभ उठाती है field_attach_load()
। यह डॉक्स के अनुसार ध्यान देने योग्य है:
ध्यान दें कि लौटी संस्थाओं में अन्य क्षेत्रों के लिए डेटा हो सकता है, उदाहरण के लिए यदि वे कैश से पढ़े जाते हैं।
तो कोड अतिरिक्त फ़ील्ड डेटा लोड करने के लिए प्रकट हो सकता है, लेकिन आपके द्वारा निर्दिष्ट फ़ील्ड के अलावा कुछ भी कैश से आएगा।
मैं एक एंटीकॉन्डिशन और फील्ड अटैच लोड का उपयोग करके थोड़ा क्लीनर तरीका ढूंढता हूं।
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'story')
->propertyCondition('status', 1)
->fieldCondition('field_story_image', 'fid', 'NULL', '!=');
$result = $query->execute();
if (isset($result['node'])) {
$stories = $result['node'];
// At first we need to get field's id. If you already know field id, you can ommit this step
// Get all fields attached to a given node type
$fields = field_info_instances('node', 'story');
// Get id of body field
$field_id = $fields['field_story_image']['field_id'];
// Attach a field of selected id only to get value for it
field_attach_load('node', $stories, FIELD_LOAD_CURRENT, array('field_id' => $field_id));
// Get values of our node field
$output = field_get_items('node', $stories, 'field_story_image');
}
ब्लॉग पोस्ट से http://timonweb.com/loading-only-one-field-from-an-entity-or-bode
बड़ी संख्या में एनआईडी होने से एक-एक करके लोडिंग नोड से बचने के लिए, आप node_load_multiple()
एक बार में कई नोड लोड करेंगे।
node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE)
आम तौर पर लोडिंग नोड्स कैश्ड होते हैं और यदि आप मेमोरी कैशिंग (जैसे मेमेकैच्ड) का उपयोग कर रहे हैं तो यह तेज़ है, लेकिन यदि आपने बहुत सारे मॉड्यूल इंस्टॉल किए हैं (जैसे कि पठौटो, आदि) तो धीमा हो सकता है।
अन्य तरीका मौजूदा वस्तु का पुन: उपयोग करना है, इसलिए जांचें कि क्या आप इसे सीधे कैश से लोड कर सकते हैं (उदाहरण के लिए form_get_cache
यदि यह प्रपत्र का हिस्सा है) या $_POST
अनुरोध के माध्यम से।
एक और तरीका है EntityFieldQuery
कई एनआईडी के साथ उपयोग करना, जैसे
$query->entityCondition('entity_id', array(17, 21, 422), 'IN')
जो डेटाबेस से सीधे मूल्यों को लाएगा।