एक काफी गतिशील समाधान (थोड़ा गंदा भी है लेकिन मुझे इसकी जल्दी जरूरत है) इसलिए आपको संदर्भ क्षेत्र के लिए हार्ड कोड नाम की आवश्यकता नहीं है और इसे भविष्य में आपके द्वारा जोड़े जाने वाले नए संदर्भ क्षेत्र के साथ स्वचालित रूप से नियंत्रित किया जाएगा:
अपने कस्टम मॉड्यूल में:
/**
* 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
संस्था के केवल एक सेट को संदर्भित कर सकता है, यह दुर्भाग्य से अन्य संस्थाओं के लिए संबंध नहीं बना सकता है। यह एक समय में केवल एक प्रकार की इकाई को वापस कर सकता है, भले ही आप इन रिश्तों को बना सकें लेकिन परिणाम अविश्वसनीय होंगे।