Я знаю, что это более старый вопрос, но для людей, которые обращаются к нему из Google, я решил добавить сюда другой подход.
Из приведенного выше описания установка имеет 2 типа сущностей, A и B. Ссылки B с ссылкой на сущность, которую я предполагаю. Так что, если у вас есть идентификатор B, у вас должно быть поле с идентификатором A, хранящимся в базе данных.
Кодовые примечания:
- Оригинал NID -
$original_node->nid
это будет идентификатор B
$type
Тип пакета - это должен быть тип A
- Условие поля просто ищет поле, которое содержит ссылку
- Для получения дополнительной информации о том, как использовать EFQ см. Это
Код
// Start a new EFQ
$query = new EntityFieldQuery();
// Define query, the user load is probably not needed but sometimes is.
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', $type)
->fieldCondition('field_NAME_OF_FIELD', 'target_id', $original_node->nid, '=')
->addMetaData('account', user_load(1));
// Execute query, result with have node key
$result = $query->execute();
// If results it will be in node key
if (isset($result['node'])) {
$nids = array_keys($result['node']);
// This example has multiple nodes being referenced by one node
$nodes = node_load_multiple($nids, array('type' => $type));
// Devel module needed
dpm($nodes);
}
Вы также можете установить двусторонние ссылки на сущности и выполнить тот же запрос в обратном порядке. Вы можете использовать такой модуль, как CER, чтобы обеспечить актуальность этих ссылок. Или настройте правило, чтобы поддерживать ссылку в актуальном состоянии, я использовал оба.
EntityFieldQuery
может ссылаться только на один набор объектов, но, к сожалению, не может создавать отношения с другими объектами. Он также может возвращать только один тип объекта за раз, поэтому даже если вы сможете создать эти отношения, результаты будут ненадежными.