একটি বেশ গতিশীল সমাধান (কিছুটা নোংরা তবে এটি আমার দ্রুত প্রয়োজন) সুতরাং আপনাকে রেফারেন্সিং ফিল্ডের জন্য নামটির হার্ড কোড দেওয়ার দরকার নেই এবং এটি স্বয়ংক্রিয়ভাবে নতুন রেফারেন্সিং ফিল্ডের সাথে পরিচালনা করা হয় আপনি ভবিষ্যতে যুক্ত করবেন:
আপনার কাস্টম মডিউলে:
/**
* Implement hook_field_create_instance().
*/
function MY_CUSTOM_MODULE_field_create_instance() {
_MY_CUSTOM_MODULE_set_variable_node_back_references();
}
/**
* Implement hook_field_delete_field().
*/
function MY_CUSTOM_MODULE_field_delete_field() {
_MY_CUSTOM_MODULE_set_variable_node_back_references();
}
/**
* Set Variable node_back_references.
*/
function _MY_CUSTOM_MODULE_set_variable_node_back_references() {
$field_list = db_select('field_config', 'fc')
->fields('fc', array('field_name', 'data'))
->condition('fc.data', '%"foreign keys";a:1:{s:4:"node"%', 'like')
->condition('fc.deleted', 0);
$field_list->innerJoin('field_config_instance', 'fci', 'fci.field_name = fc.field_name');
$field_list->rightJoin('node_type', 'n', 'n.type = fci.bundle');
$fields = $field_list->execute()->fetchAll();
$fields_array = array();
foreach ($fields as $field) {
$unserialized = unserialize($field->data);
if (isset($unserialized['settings']['handler_settings']['target_bundles'])) {
foreach ($unserialized['settings']['handler_settings']['target_bundles'] as $bundle) {
$fields_array[$bundle][] = $field->field_name;
}
}
}
variable_set('node_back_references', $fields_array);
}
function _MY_CUSTOM_MODULE_get_referencing_nodes($node) {
$nids = array();
$fields = variable_get('node_back_references', array());
if (isset($fields[$node->type])) {
foreach ($fields[$node->type] as $field) {
$query = new \EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->propertyCondition('status', 1);
$query->fieldCondition($field, 'target_id', $node->nid);
$result = $query->execute();
$nids = isset($result['node']) ? array_merge(array_keys($result['node']), $nids) : $nids;
}
$nodes = (!empty($nids)) ? node_load_multiple($nids) : array();
return $nodes;
}
return $nids;
}
যেখানে আপনার সন্তানের নোড প্রদত্ত পিতামাত নোডগুলি পাওয়া দরকার:
$nodes = _MY_CUSTOM_MODULE_get_referencing_nodes($node);
EntityFieldQuery
কেবল সত্ত্বার একটি সেটকে উল্লেখ করতে পারে, এটি দুর্ভাগ্যক্রমে অন্য সত্তার সাথে সম্পর্ক তৈরি করতে পারে না। এটি একবারে কেবল এক ধরণের সত্তাও ফিরিয়ে দিতে পারে তাই আপনি যদি এই সম্পর্কগুলি তৈরি করতে পারেন তবে ফলাফলগুলি বিশ্বাসযোগ্য নয়।