ক্ষেত্রের মান দ্বারা নোড কীভাবে লোড করবেন?


19

আমি একটি নির্দিষ্ট নোড লোড করতে চাই। আমি নোডের আইডি জানি না তবে আমি জানি যে এটির একটি নির্দিষ্ট হ্যাশ ক্ষেত্র রয়েছে যা অনন্য এবং আমি জানি যে হ্যাশ।

আমি হ্যাশ ক্ষেত্রের মাধ্যমে নোড লোড করতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


14

আপনি এন্টিফিল্ডকিউরি ব্যবহার করে অর্জন করতে পারেন।

ডি 8 এর জন্য এনটিটিফিল্ডকোওয়ারিকে আবার লেখা হয়েছিল।

ড্রুপাল 8:

$query = \Drupal::entityQuery('entity_test');
$default_langcode_group = $query->andConditionGroup()
  ->condition('user_id', $properties[$default_langcode]['user_id'], '=', $default_langcode)
  ->condition('name', $properties[$default_langcode]['name'], '=', $default_langcode);
$langcode_group = $query->andConditionGroup()
  ->condition('name', $properties[$langcode]['name'], '=', $langcode)
  ->condition("$this->field_name.value", $field_value, '=', $langcode);
$result = $query
  ->condition('langcode', $default_langcode)
  ->condition($default_langcode_group)
  ->condition($langcode_group)
  ->sort('name', 'ASC', $default_langcode)
  ->execute();

আমি কীভাবে কোনও সত্তার ক্ষেত্রের মানগুলি আনব?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('changed', REQUEST_TIME, '<')
    ->condition('title', 'cat', 'CONTAINS')
    ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();

সুতরাং যদি আমি এটি সঠিকভাবে বুঝতে পারি, তবে এটি শর্তের উপর নির্ভর করে নোড আইডিগুলির একগুচ্ছ (বা এক, বা কিছুই নয়) ফিরিয়ে দেবে, তবে আমাকে এখনও Node::নোডগুলি বোঝাতে ব্যবহার করতে হবে, সঠিক?
অ্যান্ড্রু

হ্যাঁ তুমিই ঠিক.
ড্রপওয়াই

31

ক্ষেত্রের মান দ্বারা নির্দিষ্ট নোড লোড করার দ্রুততম পদ্ধতিটি হল পদ্ধতিটি ব্যবহার করা loadByProperties()

আপনি এক বা একাধিক ক্ষেত্রের মান উল্লেখ করেছেন এবং প্রত্যাবর্তনটি হ'ল ক্ষেত্রের মানগুলির সাথে মিলে যাওয়া নোডগুলি সহ একটি অ্যারে:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);

সাধারণত আপনি নোড উপর লুপ। আপনার ক্ষেত্রে আপনি একটি নির্দিষ্ট নোড খুঁজছেন। একটি একক নোডও অ্যারেতে ফিরে আসে, সুতরাং প্রয়োগ করুন reset()এবং যদি কিছু না পাওয়া যায় তবে এটি নোড বা NULL দেয়:

if ($node = reset($nodes)) {
  // found $node that matches the title
}

1
আমি মনে করি আমার ক্ষেত্রে কোডের দ্বিতীয় অংশের প্রয়োজন হবে না $node = reset...কারণ হ্যাশটি নিজেই অনন্য।
অ্যান্ড্রু

3
একক নোড এখনও একটি অ্যারেতে রয়েছে। আপনি $ নোড = $ নোডগুলি ব্যবহার করতে পারেন [0], তবে তারপরে আপনাকে ত্রুটি লগতে সতর্কতা এড়াতে কোনও নোড রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে। রিসেট () ভাল কারণ এটি নিঃশব্দে NULL ফেরত দেয়।
কে 4

নিশ্চিত নয় যে কেন এটির জন্য সমস্ত পদক্ষেপগুলি; মূল প্রশ্নটি ক্ষেত্রের মান দ্বারা নোড লোড করা। একটি সম্পত্তি (শিরোনামের মতো) কোনও ক্ষেত্র নয়।
তরল পদক্ষেপে

@liquidcms, শিরোনাম একটি নোড ক্ষেত্র এবং আপনি অন্য কোনও নোড ক্ষেত্র ব্যবহার করতে পারেন। বিটিডাব্লু ড্রুপাল ক্ষেত্রগুলির এক বা একাধিক বৈশিষ্ট্য রয়েছে। যদি এটি একটি সম্পত্তি হয় তবে দ্রুপাল বেশিরভাগ সময় সম্পত্তি নামের মান ব্যবহার করে। সুতরাং বেশিরভাগ ক্ষেত্রে উভয় পদই বিনিময়যোগ্য।
4k4

দুটি পৃথক ক্ষেত্র জিজ্ঞাসা করার জন্য এই উদাহরণটি দেখুন drupal.stackexchange.com/questions/250306/…
4k4
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.