এন্টিফিল্ডকুয়েরির সঠিক ব্যবহার কী?


37

ড্রুপাল In-তে, প্যারামিটার node_load_multiple()ব্যবহার করে সুনির্দিষ্ট করার জন্য এপিআই ডকুমেন্টেশন ব্যবহারের $conditionsপক্ষে অবহেলা করা হয়েছে EntityFieldQuery। ব্যবহারের জন্য নোড আইডির একটি তালিকা তৈরি করতে শ্রেণিটি কীভাবে ব্যবহার করবে node_load_multiple()? এর জন্য অন্য কোনও ব্যবহারের মামলা রয়েছে কি?

উত্তর:


36

ক্ষেত্রের পাশাপাশি অন্যান্য নোডের বৈশিষ্ট্যগুলির জন্য কাজ করার জন্য, ক্ষেত্রের স্টোরেজ মডিউলগুলি যেমন ফিল্ড এসকিউএল স্টোরেজগুলির সাথে ইন্টারফেস করার জন্য এন্টিফিল্ডকিউরি হুকের একটি সেট ব্যবহার করে। দীর্ঘমেয়াদী, এন্টিফিল্ডকিউরি হ'ল যে কোনও ধরণের সত্তাকে জিজ্ঞাসা করার জন্য আরও নির্ভরযোগ্য উপায় এবং কিছু পরিস্থিতিতে এটি ক্রস সত্তা কোয়েরিগুলি সম্পাদন করতে পারে ( উদাহরণ হিসাবে ক্ষেত্র_হাস_ডাটা বা _লিস্ট_মূল্য_ইন_উজ () দেখুন

নির্দিষ্ট টাইমস্ট্যাম্পের আগে প্রকাশিত সমস্ত নোডের একটি তালিকা পেতে এন্টিফিল্ডকিউরি ব্যবহারের একটি সাধারণ উদাহরণ এখানে:

$query = new EntityFieldQuery();

$query
  ->entityCondition('entity_type', 'node', '=')
  ->propertyCondition('status', 1, '=')
  ->propertyCondition('created', '1294694496', '<');

$result = $query->execute();

query এই ক্যোয়ারির ফলাফলগুলি এরকম কিছু দেখতে পাবে:

Array
(
    [node] => Array
        (
            [1] => stdClass Object
                (
                    [nid] => 1
                    [vid] => 49
                    [type] => article
                )

            [2] => stdClass Object
                (
                    [nid] => 2
                    [vid] => 2
                    [type] => page
                )

        )

)

তারপরে আপনি সেই অ্যারেটি ইনপুট হিসাবে নোড_লোড_ মাল্টিপ্লেলে ব্যবহার করতে পারেন:

$nodes = node_load_multiple(array_keys($result['node']));

3
ফিল্ড_হাস_ডাটা _লিস্ট_ভ্যালু_ইন_ ইউজ

15

এর জন্য উদাহরণ যুক্ত করার জন্য আমি দ্রুপালের উপর একটি সমস্যা পেয়েছি EntityFieldQuery। আমি উদাহরণের জন্য এটি ব্যবহার করেছি পাশাপাশি আরও উদাহরণের জন্য কলটিতে আমার মতামত জানাতে।

"আমাদের কি কোনও অ্যান্টিফিল্ডকিউরি উদাহরণ প্রয়োজন? "

মন্তব্য # 11 এর শো ব্যবহারের node_load_multiple()নীচে দেখা গেছে:

$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
                        ->entityCondition('bundle', 'event')
                        ->propertyCondition('status', 1)
                        ->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
                        ->fieldOrderBy('field_date', 'value', 'ASC')
                        ->execute();

$nodes = entity_load('node', array_keys($entities['node']));
return node_view_multiple($nodes, 'teaser');

2
সাবধানতা, ক্ষেত্রঅর্ডার পদ্ধতি পদ্ধতি সম্পর্কিত ক্ষেত্রটি যে কোনও নোড ছেড়ে দেবে। যা বিভ্রান্তিকর কারণে এটি কেবল ছাঁটাই এবং ফিল্টার না করার কথা বলে মনে করা হয় (আপনি খালি ক্ষেত্রের সাথে নোডগুলি ফলাফলের سیটের উপরে বা নীচে থাকবেন বলে আশা করবেন)। আরও তথ্য এবং আশা করি একটি সমাধান এখানে পাওয়া যাবে drupal.org/node/1611438 এবং এখানে drupal.org/node/1662942
মারিও আবাদ

9

পরীক্ষার মডিউলগুলির একটির উদাহরণ এখানে:

http://api.drupal.org/api/drupal/modules--node--tests--node_access_test.module/function/node_access_entity_test_page/7

এটি নোডগুলি নির্বাচন করে যার শরীরের ক্ষেত্র "A" দিয়ে শুরু হয়। ফিরে আসা ফলাফলটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে এন্টিফিল্ডকিউয়ারি :: কার্যকর করুন ()ও দেখুন ।

অনেকগুলি ব্যবহারের কেস রয়েছে, সাধারণ উদাহরণটি উদাহরণস্বরূপ দেহের ক্ষেত্রের মতো নির্দিষ্ট ক্ষেত্রের মানের জন্য সত্তাগুলি জিজ্ঞাসা করা।

সুবিধাটি হ'ল এটি যে ক্ষেত্রের_ স্টোরেজ আপনি ব্যবহার করছেন তা কাজ করে। উদাহরণস্বরূপ, আপনি মোংগোডিবিতে আপনার ক্ষেত্র থাকতে পারেন এবং ক্ষেত্র_ডাটা_উডিউরিয়ালি ম্যানুয়ালি জিজ্ঞাসা করার সময় এন্টিটিকিউরি এখনও কাজ করবে।


0

আপনি ডাটাবেসটি জিজ্ঞাসা করতে এবং অনুরূপ তালিকার আকারে ফলাফলগুলি আনতে এনটিটিফিল্ডকিউরি ক্লাস ব্যবহার করতে পারেন node_load_multiple()

একটি শ্রেণি তৈরি করে, শর্ত প্রয়োগ করে এবং ক্যোয়ারী কার্যকর করে এটি অর্জন করা যায়, উদাহরণস্বরূপ:

<?php
$query = new EntityFieldQuery();
$query
  ->entityCondition('entity_type', 'TYPE') // E.g. node, entityform, taxonomy_term
  ->entityCondition('bundle', 'BUNDLE')
  ->fieldCondition('field_foo', 'value', 'STRING')
  ->range(0,10);
$result = $query->execute();
?>

এটি অ্যারের যেমন তৈরি করবে:

array (
  'TYPE' =>
  array (
    123 =>
    stdClass::__set_state(array(
       'nid' => '123', // Can be also tid when loading terms.
       'key' => 'value',
    )),
    456 =>
    stdClass::__set_state(array(
       'nid' => '456',
       'key' => 'value',
    )),
  ),
)

বিন্যাসের ফলাফল থেকে ID আনা করার জন্য, আপনাকে ব্যবহার করতে পারেন: current(current($result))->tid

এখানে আরও উন্নত উদাহরণ:

<?php
$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'article')
  ->propertyCondition('status', NODE_PUBLISHED)
  ->fieldCondition('field_news_types', 'value', 'spotlight', '=')
  ->fieldCondition('field_photo', 'fid', 'NULL', '!=')
  ->fieldCondition('field_faculty_tag', 'tid', $value)
  ->fieldCondition('field_news_publishdate', 'value', $year . '%', 'like')
  ->fieldOrderBy('field_photo', 'fid', 'DESC')
  ->range(0, 10)
  ->addMetaData('account', user_load(1)); // Run the query as user 1.

$result = $query->execute();

if (isset($result['node'])) {
  $news_items_nids = array_keys($result['node']);
  $news_items = entity_load('node', $news_items_nids);
}
?>

দেখুন: আরও ব্যাখ্যাের জন্য কীভাবে Drupal.org এ এন্টিফিল্ডকিওয়ারি ব্যবহার করবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.