Xyz ক্ষেত্রটি খালি খালি রয়েছে এমন সমস্ত সত্তা নির্বাচন করা কি সম্ভব?
আমি এরকম কিছু করার চেষ্টা করেছি:
->fieldCondition('field_name', 'value', NULL, 'IS NOT NULL');
তবে, এটি কাজ করবে বলে মনে হয় না।
কোন ধারনা?
Xyz ক্ষেত্রটি খালি খালি রয়েছে এমন সমস্ত সত্তা নির্বাচন করা কি সম্ভব?
আমি এরকম কিছু করার চেষ্টা করেছি:
->fieldCondition('field_name', 'value', NULL, 'IS NOT NULL');
তবে, এটি কাজ করবে বলে মনে হয় না।
কোন ধারনা?
উত্তর:
আপনি যদি ক্ষেত্রের শর্তাদি ডকুমেন্টেশন পৃষ্ঠাতে লক্ষ্য করেন তবে নীচের সতর্কতাটি দেখতে পাবেন:
নোট করুন যে এই পদ্ধতিটি ব্যবহার করার সময় খালি ক্ষেত্রের মান সহ সত্তাগুলি সত্তা ফিল্ডকুইয়ের ফলাফল থেকে বাদ দেওয়া হবে।
একটি ক্ষেত্র বিদ্যমান কিনা তা পরীক্ষা করা হচ্ছে দ্রুপাল 8-তে ইন্টিফিল্ডকিউরিতে যুক্ত করা হয়েছে, তবে দুর্ভাগ্যক্রমে ড্রুপাল 7-এ ব্যাকপোর্ট করা হবে না ।
এটি অর্জনের জন্য বিভিন্ন পদ্ধতি রয়েছে:
: _
$q = db_select('node', 'n');
$q->fields('n', array('type'))
->condition('n.type', 'my_node_type', '=')
->addJoin('LEFT', 'field_data_field_my_field', 'f', 'f.entity_id = n.nid');
$q->isNull('f.value');
$r = $q->execute();
আপনি ব্যবহার করতে পারেন != NULL
, তবে আপনি = NULL
কোনও কারণে ব্যবহার করতে পারবেন না ।
এটি আমার কাজ
//Get all the entities that DO have values
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->fieldCondition('field_MY_FIELD', 'value', 'NULL', '!=');
$result = $query->execute();
if (is_array(@$result['registration'])) {
//Now get all the other entities, that aren't in the list you just retrieved
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->entityCondition('entity_id', array_keys($result['MY_TYPE']), 'NOT IN');
$result_two = $query->execute();
}
ডকুমেন্টেশন অনুসারে আপনি নাল এবং ইসনুল ব্যবহার করতে পারেন; এটি লেখার একটি নির্দিষ্ট উপায় আছে।
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', 1)
->fieldCondition('field_news_types', 'value', 'spotlight', '=')
->fieldCondition('field_photo', 'fid', 'NULL', '!=')
->fieldCondition('field_faculty_tag', 'tid', $value)
->fieldCondition('field_news_publishdate', 'value', $year. '%', 'like')
->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);
}
সংক্ষিপ্ত উত্তরটি হ'ল সরাসরি, আপনি পারবেন না ( এন্টিফিল্ডকিউরিটি isNull বা isNotNull সমর্থন করে না )। যদি আমি সঠিকভাবে মনে রাখি তবে এটি এইমাত্রার পার্শ্ব-প্রতিক্রিয়া যা EntityFieldQuery
কেবল INNER JOIN
টেবিলগুলিতে যোগদানের জন্য s ব্যবহার করে।
যদিও hook_query_TAG_alter()
আপনার কাজের সাথে একটি ট্যাগ ব্যবহার এবং যুক্ত করা জড়িত EntityFieldQuery
রয়েছে, তার উপরে একটি পৃষ্ঠা রয়েছে যা আমি উপরে উল্লিখিত পৃষ্ঠায় সর্বশেষ মন্তব্যে আছে।
দ্রুপাল In-তে দয়া করে এখানে প্রস্তাবিত নীচের কাজটি পরীক্ষা করুন :
ক্যোরির উদাহরণটি পরিবর্তন করতে ট্যাগটি নিবন্ধ করুন:
<?php
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_node_is_not_tagged_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_tags', 'o', 'node.nid = o.entity_id AND o.entity_type = :entity_type');
$query->isNull('o.field_tags_tid');
}
?>
ওবস: এই কোয়েরি ট্যাগটি কেবলমাত্র "নোড" সত্তার ধরণের জন্য কাজ করে। "ট্যাগ্স" শব্দভাণ্ডারের সাথে সম্পর্কিত "ফিল্ড_ট্যাগগুলি" গুলিয়ে ফেলবেন না, "বিভাগ" এর মতো অন্য কোনও হতে পারে।
সেখান থেকে সমস্ত নোড এন্টিফিল্ডকুরি ব্যবহার করে এখনও ট্যাগ করা হয়নি, অ্যাডট্যাগ () পদ্ধতিটি দেখুন:
<?php
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'news')
->addTag('node_is_not_tagged')
->propertyCondition('status', 1);
$result = $query->execute();
?>
অন্যান্য উদাহরণ:
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', 'my_content_type')
->fieldCondition('field_mine_one', 'value', '', '<>')
->fieldCondition('field_mine_two', 'value', '', '<>')
->addTag('my_custom_tag')
->deleted(FALSE)
->propertyOrderBy('changed', 'DESC')
->range(0, $my_range_value)
->execute();
তারপর আমি বাস্তবায়িত
hook_query_TAG_alter
সত্য যে ওঠানামাmy_custom_tag
করা হয় শুধু আমার দ্বারা সেট করুন:
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_TAG_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_other', 'o', 'node.nid = o.entity_id');
$query->isNull('o.field_other_value');
}
আরেকটি উদাহরণ:
<?php
//Get all the entities that DO have values
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->fieldCondition('field_MY_FIELD', 'value', 'NULL', '!=');
$result = $query->execute();
if (is_array(@$result['registration'])) {
//Now get all the other entities, that aren't in the list you just retrieved
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'MY_TYPE')
->entityCondition('entity_id', array_keys($result['MY_TYPE']), 'NOT IN');
$result_two = $query->execute();
}
?>
ক্রোন টাস্কে নোডগুলির গোছা লোড করে যার নিচে আরও সম্পূর্ণ উদাহরণ যা শুল্কের শর্তাবলী রেফারেন্স করে এবং কিছু পরিবর্তন প্রয়োগ করে:
/**
* Implements hook_cron().
*/
function MYMODULE_cron() {
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'property')
->propertyOrderBy('changed', 'DESC')
->addTag('type_is_null')
->range(0,50); // Maximum of 50.
$result = $query->execute();
if (!empty($result['node'])) {
$nids = array_keys($result['node']);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
// do_some_stuff($node);
}
}
}
/**
* Implements hook_query_TAG_alter()
*/
function MYMODULE_query_type_is_null_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_foo', 'f', 'node.nid = f.entity_id AND f.entity_type = :entity_type');
$query->isNull('f.field_foo_tid'); // Check name by SQL: DESC field_data_field_foo
$query->leftJoin('field_data_field_bar', 'b', 'node.nid = b.entity_id AND b.entity_type = :entity_type');
$query->isNull('b.field_bar_tid'); // Check name by SQL: DESC field_data_field_bar
}
আমি ভুল হলে আমাকে সংশোধন করুন। মনে হচ্ছে এটি কেবল হওয়া দরকার
$query->fieldCondition('field_name');
খালি field_name
মাঠের সাথে সমস্ত নোড বাদ দিতে _
দ্রুপালে পরীক্ষিত version >= 7.43
।