При работе с сущностями в Drupal нередко возникает задача: из ссылочного поля (entity reference
) нужно достать список ID связанных объектов.
Например, у нас есть нода с полем field_other_exclusions
. Если вывести его содержимое через getValue()
, мы получим массив массивов:
1 2 3 4 5 6 7 |
$node->get('field_other_exclusions')->getValue(); // Результат: [ 0 => ['target_id' => '26'], 1 => ['target_id' => '5'], ] |
На первый взгляд придётся перебирать этот массив циклом, чтобы собрать только target_id
. Но на практике есть несколько более изящных решений.
Функция array_column
Самый короткий способ на чистом PHP — использовать array_column
:
1 2 3 |
$ids = array_column($node->get('field_other_exclusions')->getValue(), 'target_id'); // $ids = ['26', '5'] |
Это каноничный приём, который часто встречается в Drupal-коде.
Функция referencedEntities
Если вам нужны не только ID, а сами объекты, используйте метод referencedEntities()
:
1 |
$entities = $node->get('field_other_exclusions')->referencedEntities(); |
А список ID можно получить одной строкой:
1 |
$ids = array_map(fn($entity) => $entity->id(), $entities); |
Комбинированный вариант
Если нужно компактно и с проверкой:
1 2 3 |
$ids = $node->get('field_other_exclusions')->isEmpty() ? [] : array_column($node->field_other_exclusions->getValue(), 'target_id'); |