এন্টিফিল্ডকিউরির সাথে কেবল কিছু ক্ষেত্র পাবেন?


19

ড্রুপাল 7 এটিটিফিল্ডকুয়েরীর সাথে খুব প্রতিশ্রুতিযুক্ত ওআরএম-এর মতো প্রশ্নগুলির সিস্টেম রয়েছে।

বর্তমানে, আমি কীভাবে নোডগুলি নির্বাচন করতে হবে তা বুঝতে পেরেছি, তবে ফলাফলটিতে সুনির্দিষ্ট কোনও তথ্য নেই, যেমন ফাইলড, আমি খুঁজছি।

$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']));

ক্ষেত্রের মান পাওয়ার কোনও উপায় থাকলে এর পরিবর্তে সমস্ত নোডের সম্পূর্ণ ডেটা লোড করা যায়, কারণ এটি কিছু মেমরির ওভারলোড প্ররোচিত করে।

$nodesFieldDates = ???

উত্তর:


10

দুর্দান্ত প্রশ্ন!

EntityFieldQuery সত্যই ভাল জিনিস, তবে আপনি যদি সত্যিই গুরুতর হয়ে উঠতে চান তবে আপনাকে একটি কাস্টম মডিউলে ক্লাসটি ওভাররাইড করতে হবে এবং সেখানে আপনার যা কিছু আচরণ করা দরকার তা যুক্ত করতে হবে।

আমি আপনার সঠিক উদ্দেশ্যগুলি জানি না, তবে আমি অতীতে এই বিষয়টির নিবন্ধটিতে নিজেকে উল্লেখ করেছি । এই ভাল লিখিত লেখার জন্য নীল হেস্টিংসকে ক্রেডিট।

ওভারডিংয়ের দুর্দান্ত উদাহরণগুলির জন্য নিবন্ধের জন্য কোড উদাহরণগুলি দেখুন Look

আশা করি যে সাহায্য করবে, শুভ কোডিং!


আচ্ছা আমি দেখি ! সুতরাং, সম্ভবত, বিকল্প ফলাফলের ক্ষেত্রগুলিতে "এন্টিফিল্ডকিউরি" "বিল্ডকুয়েরি" পদ্ধতিটিকে নতুন করে সংজ্ঞায়িত করা সম্ভব। সম্ভবত, এটি কাজ করতে পারে।
ফেদির আরওয়াইকটিক

11

আমি এর জন্য উত্তর খুঁজে পেয়েছি! অ্যাপাচি সোলার মডিউলটি এটি তৈরি করার জন্য এন্টিফিল্ডকিউরি ক্লাসকে বাড়িয়েছে । এটি অ্যাডেক্সট্রাফিল্ড নামে একটি নতুন পদ্ধতি যুক্ত করে।

<?php
$query = new ApachesolrAttachmentsEntityFieldQuery();
$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')
  ->addExtraField('field_date', 'value', 'value')
  ->execute();
?>

আপনার যদি অ্যাপাচি সোলার ইনস্টল না থাকে তবে কেবলমাত্র সেই শ্রেণিটি বাড়ানোর জন্য কোডটি অনুলিপি করুন।


যেমন Apache, Solr মডিউল ছিল এই জন্য একটি স্যান্ডবক্স তৈরি হয়েছে কিছু অপূর্ণতা drupal.org/sandbox/mikeytown2/2209909
mikeytown2

2
মাইকিটাউন 2 (ধন্যবাদ!) দ্বারা নির্মিত (বর্তমানে স্যান্ডবক্স) মডিউলটির জন্য কেবল এই উত্তরটিকে সমর্থন করেছে
অলিভার কোলম্যান

উত্তরের লিঙ্কটি কাজ করছে বলে মনে হচ্ছে না। এটিতে বলা আছে "চালিয়ে যাওয়ার আগে আপনাকে সাইন ইন করতে হবে বা সাইন আপ করতে হবে।"
mbomb007

@ mbomb007 github.com/AmazeeLabs/apachesolr_attachments/blob/… লিঙ্কটি আপডেট করেছেন
মাইকাইটাউন 2

8

আপনার কোনও কিছুর ওভাররাইড বা ক্লাস প্রসারিত করার দরকার নেই। ক্লাসের field_attach_load()ফলাফলগুলির সাথে আপনি যে ক্ষেত্রটি চান তা সংযুক্ত করতে আপনাকে কেবল ব্যবহার করতে হবে EntityFieldQuery

ড্রপাল in-তে কোনও সত্তা বা নোড থেকে কেবল একটি ক্ষেত্র লোড করাও দেখুন , এটি কীভাবে করা যায় তার উদাহরণ সহ একটি ভাল নিবন্ধ।


0

যে কেউ এখনও ইএফকিউ থেকে ক্ষেত্রগুলি পেতে চাইছেন তারা EFQ অতিরিক্ত ক্ষেত্রগুলির মডিউলটি একবার দেখুন।

সতর্কতা: এই মডিউলটি আপনার ডাটাবেস থেকে ডেটা ফিরিয়ে আনতে অ্যান্টিফিল্ডকুইয়ারিকে আপত্তি জানায়। এটি সত্তা বা তাদের উপর নির্মিত কোনও মডিউল নিয়ে কাজ করে না।

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

সতর্কতার শব্দ, আপনি যদি কিছু পোস্ট-ফর্ম্যাটিং / পোস্ট-লোডিংয়ের উপর নির্ভর করেন যা সত্তা_লোড বা অনুরূপ ফাংশনগুলিতে ঘটে তবে এই মডিউলটি সেটির যত্ন নেবে না। আপনাকে পুনরুদ্ধার করা তথ্যের বৈধতা নিশ্চিত করতে হবে।

উদাহরণ

নোড শিরোনাম আনছে

$ ক্যোয়ারী = নতুন এন্টিফিল্ডকিউরিএক্সট্রাফিল্ডস ();
  $ ফলাফল = $ ক্যোয়ারী-> সত্তাশক্তি ('সত্তা_প্রকার', 'নোড')
  -> সম্পত্তিকন্ডিশন ('টাইপ', 'আমার_বান্ডেল_প্রকার')
  -> সম্পত্তিকন্ডিশন ('স্ট্যাটাস', 1)
  -> অ্যাডেক্সট্রাফিল্ড ('ফিল্ড_মিফিল্ড', মান ', মান')
  -> অ্যাডেক্সট্রাফিল্ড ('ফিল্ড_মাইনোডেরেফিল্ড', নিড ', এনআইডি')
  -> অ্যাডেক্সট্রাফিল্ড ('', 'শিরোনাম', 'শিরোনাম', 'নোড')
  -> ফিল্ডকন্ডিশন ('ফিল্ডমাইফিল্ড', 'মান', 'কিছু_মূল্য_তো_ ফিল্টার_ও', '=')
  -> চালানো ();
সম্ভাব্য সমন্বয়:
অ্যাডেক্সট্রাফিল্ড ($ ক্ষেত্রের নাম, $ কলাম, $ কলাম_আলিয়াস = NULL, $ টেবিল = NULL)

ক্ষেত্র নাম
অতিরিক্ত ক্ষেত্রটি কোন ক্ষেত্র থেকে আসা উচিত তা উল্লেখ করুন। যদি এটি কোনও বেস টেবিল থেকে হয় তবে এটিকে খালি রেখে টেবিলের যুক্তিটি পূরণ করুন

স্তম্ভ
কলামটির নাম উল্লেখ করুন,

column_alias
কলামটির নাম উল্লেখ করুন,

টেবিল
Ptionচ্ছিকভাবে নোড বা ব্যবহারকারীর মতো কিছু এখানে যুক্ত করুন (বেস টেবিল),

আমি এই দুটি মডিউল (EFQ অতিরিক্ত ক্ষেত্র) এবং মাইকিটাউন 2 দ্বারা (বর্তমানে স্যান্ডবক্স) মডিউল চেষ্টা করেছি এবং আধুনিকটি আরও ভাল বলে মনে হয়েছে (ব্যবহারের জন্য আরও ভাল, আরও বুদ্ধিমান আউটপুট) এবং এটি আগেরটির তুলনায় অনেক ভাল বজায় রয়েছে বলে মনে হয়। mikeytown2 স্যান্ডবক্স মডিউল রয়েছে drupal.org/sandbox/mikeytown2/2209909
অলিভার কোলম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.