Я знаю, що це питання старіше, але для людей, які дісталися до Google від цього, я подумав, що тут я підкажу інший підхід.
З наведеного вище опису у програмі встановлено два типи сутності, A і B. B посилання A з посиланням на сутність я припускаю. Отже, якщо у вас є ідентифікатор B, у вас повинно бути поле з ідентифікатором A, що зберігається в базі даних.
Примітки до коду:
- Оригінальний NID -
$original_node->nid
це ідентифікатор B
- Тип пачки -
$type
це має бути тип А
- Умова поля просто шукає поле, яке містить посилання
- Для отримання додаткової інформації про використання 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
Може посилатися тільки один набір сутностей, вона не може створити відносини до інших осіб на жаль. Він також може одночасно повертати лише один тип сутності, навіть якщо ви могли б створити ці відносини, результати були б ненадійними.