কোনও সত্তা (যেমন নোড) অবজেক্টের ক্ষেত্রের মানটি কীভাবে আমি অ্যাক্সেস করব?


63

node_load((int) $nid)সম্পূর্ণ জনবহুল নোড সত্তা লোড করে। $node->title->valueশিরোনাম পায়, তবে ড্রুপাল 8-তে আমি ক্ষেত্রের মানগুলি কীভাবে অ্যাক্সেস করব?

উত্তর:


89

আমার ধারণা আপনার $entityকোনও অ্যারেতে রূপান্তর করার দরকার নেই , এটি কেবল কার্যকর হবে।

$entity->get('field_name')->getValue();

অবগতির জন্য: ব্যবহার kint()থেকে devel_kintমডিউল উপলব্ধ সমস্ত পদ্ধতি যে বস্তুর উপাদান অ্যাক্সেস করতে ব্যবহার করা যেতে পারে জানি, তাই তুলনামূলকভাবে দেওয়া হবে var_dump()কম সহায়ক।


14
আসলে এটি হওয়া উচিত: $ সত্তা-> পান ('ক্ষেত্রের নাম') -> মান;
এড হলিংহર્স্ট

1
আপনি কি জানেন যে এটি কেন এডহলিংহર્স্ট? getValue সত্যিই আমার জন্য ত্রুটি করে, কিন্তু (ডিপিএম ব্যবহার করে) এটি উপলব্ধ পদ্ধতিগুলিতে তালিকাভুক্ত করা হয়েছে, যদিও 'মান' হয় না।
অটোপয়েটিক

2
getValue()আমার জন্য কাজ করে (8.1.x এবং 8.2.x উভয়) এপিআই রেফারেন্স দেখুন
leon.nk

16
->getValue()জেনেরিক এবং ক্ষেত্রের ধরণ নির্বিশেষে কাজ করবে। আপনি যদি ব্যবহার ->valueকরেন তবে ক্ষেত্রের মান কোনও valueসম্পত্তিতে সংরক্ষণ করা হলে এটি কেবল কাজ করে । এটি আরও জটিল ধরণের জন্য কাজ করবে না (যেমন: তারিখ বা সত্তার রেফারেন্স)।
পিয়েরে বুয়েল

4
সত্তার "ক্ষেত্রের নাম" নামে একটি ক্ষেত্র না থাকলে এই কোডটি একা ত্রুটি ছুঁড়ে দেবে। নিশ্চিত হয়ে নিন যে এই কোডটি কেবল সেই সত্তাগুলিতেই চালিত হয়েছে যেখানে আপনি জানেন যে ক্ষেত্রটি বিদ্যমান, আপনি পরীক্ষার জন্য $ সত্তা-> হ্যাসফিল্ড ('ক্ষেত্রের নাম') ব্যবহার করতে পারেন, বা যদি (! খালি ($ সত্তা-> ক্ষেত্রের নাম))
ওপেনেট

56

ড্রুপাল 8 এ, ক্লাস নোডের নোড

 $node->field_machine_name->getValue();

অথবা

$node->get('field_machine_name')->getValue();

মানগুলির একটি অ্যারে ফিরিয়ে দেবে।

আপনি যদি কেবল একটির প্রত্যাশা করেন তবে আপনি পাশাপাশি অ্যারেটিকে আরও শক্তিশালী করতে পারেন

$node->field_machine_name->getString();

অথবা

 $node->get('field_machine_name')->getString();

আমি এটি "পাই না" (স্ট্রিং এবং মান) "এটি"। এই উত্তরটি ব্যাখ্যা করতে আপনি আরও কিছু বিশদ যুক্ত করতে পারেন? এফওয়াইআই: এটি না করা আপনার উত্তরকে সংযমের মাধ্যমে মুছে ফেলার ঝুঁকিতে
ফেলেছে

34

ক্ষেত্রগুলির $node->body->valueজন্য আপনার উদাহরণস্বরূপ ব্যবহার করতে সক্ষম হওয়া উচিত । ক্ষেত্রের নাম কী তা যদি আপনি না জানেন তবে আমি দ্রুপাল 8 এর জন্য দেভেল মডিউল ইনস্টল করার এবং নোডটি লাইকের মাধ্যমে পরিদর্শন করার পরামর্শ দিচ্ছি dsm($node)


1
আপনি কিভাবে সেই ক্ষেত্রটি রেন্ডার করবেন?
অ্যালেক্স

1
এটি পুরানো বলে মনে হচ্ছে
অ্যালেক্স

1
@ অ্যালেক্স আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যে সমস্যাটি করছেন তার সাথে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন। এই সময় এটি একটি ঠিক উত্তর ছিল, উত্তরটি এখন সম্পাদনা করা অসুবিধাজনক বলে মনে হচ্ছে এটি এই পৃষ্ঠায় একটি উত্তর যা এর চেয়ে বেশি পয়েন্ট রয়েছে।
টেনেন

5
একটি সুন্দর ব্যাখ্যা জন্য এই নিবন্ধটি দেখুন । আপনি হয় একক মান পেতে or নোড-> ক্ষেত্রের নাম-> মানটি ব্যবহার করতে পারেন (বা মাল্টি-মান ক্ষেত্রের প্রথম কী)। অথবা আপনি অ্যারে হিসাবে ক্ষেত্রের সমস্ত মান পেতে $ node-> ক্ষেত্রের নাম-> getValue () ব্যবহার করতে পারেন।
মিরসোফ্ট

2
@ টেনকেন: আসলে, একটি উত্তর উত্তর আপডেট করা নতুন উত্তরগুলির সাথে একটি অপ্রয়োজনীয় প্রশ্ন যুক্ত করার চেয়ে ভাল।
পিয়েরে বুয়েল

17

$entity->toArray()কোনও সত্তায় কী আছে তা দেখতে আপনি সর্বদা করতে পারেন। এমনকি xdebug ব্যবহার করার সময় (উদাহরণস্বরূপ phpstorm সহ) নিজের কোনও সত্তা বস্তুর বোধ তৈরি করা খুব শক্ত। আমি dsm($node)ড্রুপাল 8 এ সন্দেহ করি যে কোনও ধারণা দেয়। যদি আপনি ইন-ব্রাউজার ডিবাগিংয়ের জন্য জেদ করেন (তবে আপনার হওয়া উচিত নয়, দ্রুপাল 8 এক্সডিবিগ ছাড়াই ডিবাগ করা খুব জটিল) dsm($node->toArray())আপনি যা চান তা হ'ল ।


$ নোড> toArray () Drupal এর 8. উপর আমার জন্য কাজ করে না
অ্যাক্সেল Briche

দয়া করে এতে একটি নতুন প্রশ্ন যুক্ত করুন। Drupal\Core\Entity\EntityInterfaceহয়েছে toArray

1
এই উত্তরটি সমাধান সরবরাহ করে না; downvoting।
কোলান

যদিও এই উত্তরটি এই প্রশ্নের সরাসরি উত্তর নয়, এটি এক জঘন্য কাজ। ধন্যবাদ।
স্টেফ ভ্যান লুভেরেন

14

নোড ফিল্ডের মানগুলি পেতে নিম্নলিখিত কোড স্নিপেট ব্যবহার করুন

এটি ইউআরএল থেকে নোড আইডি পেতে ব্যবহৃত হয়

$nid = \Drupal::routeMatch()->getRawParameter($node_id);

NID ব্যবহার করে নোড ডেটা লোড করতে

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

এটি ক্ষেত্রের মান পেতে ব্যবহৃত হয়।

$terms = $node->get('field_Name')->getValue();  

এটি নোড শিরোনাম পেতে ব্যবহৃত হয়।

$product_name = $node->getTitle();

2
নোডটি এর মতো লোড করুন: id nid = rup দ্রুপাল :: রুট ম্যাচ () -> getRawParameter ('নোড'); ode নোড = \ দ্রুপাল :: অ্যান্টিটাইপম্যানেজার () -> getStorage ('নোড') -> লোড (id nid);
rémy

8

আমার জন্য, একটি $entity(একটি নোড) থাকার কাজ করেছে:

$entity->field_name->getValue();

8.1 ব্যবহার করে।


2
এটি একাধিক মান ক্ষেত্রের সমস্ত মানকে একটি অ্যারেতে পেয়েছে। এটি অবশ্যই একক-মান ক্ষেত্রের মান পেতে ব্যবহৃত হতে পারে তবে আউটপুটটিতে একটি একক মান সহ একটি অ্যারে থাকবে। কোনও ক্ষেত্রের একক মান (বা একাধিক মানের ক্ষেত্রের প্রথম মান) পেতে, $ সত্তা-> ক্ষেত্রের নাম-> মানটি ব্যবহার করুন
মিরসোফট

7

ব্যবহার করার সময় (প্রকৃত সঠিক উপায়):

$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID

// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value(); 
$node->nid->getValue();


4

এটি সহজ:

$node->get('field_name')->getValue()

ক্ষেত্রটি যদি কোনও সত্তার রেফারেন্স ক্ষেত্র হয় তবে রেফারেন্সযুক্ত সত্তাগুলি পাওয়ার জন্য কয়েকটি বিশেষ উপায় রয়েছে।

লক্ষ্য আইডি পেতে (প্রথম উপাদান):

$entity->get('field_entity_reference')->target_id

বোঝা সত্তা (প্রথম উপাদান) পেতে:

$entity->get('field_entity_reference')->entity

->entityমাঠে ব্যবহার করার সময় এটি স্বয়ংক্রিয়ভাবে সত্তাটি লোড করে।

যদি ক্ষেত্রটিতে একাধিক রেফারেন্স থাকতে পারে তবে আপনি সেগুলি এই জাতীয়ভাবে এনে দিতে পারেন:

$entities = $entity->get('field_entity_reference')->referencedEntities();

এটি আপনাকে সত্ত্বার একটি অ্যারে দেবে।

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