উত্তর:
আমি মনে করি না এপিআই-তে কিছু অন্তর্নির্মিত আছে তবে একটি চিম্টিতে আপনি সরাসরি ডাটাবেসটি অনুসন্ধান করতে পারেন:
$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-node
প্রচুর পরিমাণে এনআইডি থাকার পরে একের পর এক নোড লোড করা এড়াতে আপনি ব্যবহার করতে পারেন 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')
যা সরাসরি ডাটাবেস থেকে মানগুলি আনবে।