Программно обновить поле ссылки сущности

Я знаю, что могу обновить (или установить значение) поле ссылки сущности в Drupal 7 с кодом, подобным следующему.

 $node['field_code_used_by'][LANGUAGE_NONE][0]['target_id'] = $id;

Я хочу программно установить значение для моего ссылочного поля пользовательской сущности в Drupal 8.

Я попытался с помощью $node->field_code_used_by->setValue(1); и $node->field_code_used_by->entity->value = 1;, но ни один из них не работал.

Как установить значение для ссылочного поля сущности?

20 голосов | спросил Prakash 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2016 08:47:46 +0300 2016, 08:47:46

2 ответа


23

Вам нужно использовать код, похожий на следующий.

    $node = Node::load($nid);     
    $node->field_code_used_by->target_id = $user_id;
    $node->save();

Для поля с несколькими значениями, чтобы добавить значение в конец списка, используйте следующий код.

$node->field_code_used_by[] = ['target_id' => $user_id];

Другой способ - установить свойство entity с объектом сущности, как в следующем коде.

    $node = Node::load($nid);
    $user = \Drupal\user\Entity\User::load(1);
    $node->field_code_used_by->entity = $user;
    $node->save();
ответил zhilevan 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2016 08:51:28 +0300 2016, 08:51:28
7

Как и в D7, основным свойством ссылочного поля в D8 по-прежнему является target id:

$node->field_code_used_by->target_id = $user_id;

Свойство entity - это вычисленное значение. Если вы поместите объект в это значение, drupal преобразует его обратно в идентификатор, прежде чем сохранять его в dababase.

Многозначные поля

Добавьте элемент в многозначное поле:

$node->field_code_used_by[] = ['target_id' => $user_id];

Свойство target_id не требуется, поскольку оно является основным свойством и используется по умолчанию. Поэтому для большинства полей вы можете добавить значение, как в простой php-массив, который легко запомнить:

$node->field_code_used_by[] = $user_id;
ответил 4k4 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2016 10:06:07 +0300 2016, 10:06:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132