Рейтинг:0

Как программно добавить абзац к другому абзацу?

флаг in

У меня есть узел (например, бизнес-"компания") с полем, на которое ссылается абзац (предположим, бизнес-"сектор" с несколькими полями). Этот абзац имеет в своих полях ссылку на другой абзац (предположим, «сотрудник» с несколькими полями, одно из которых является ссылкой на термин таксономии). В крючок_form_submit(), с $форма и FormStateИнтерфейс $form_state в качестве параметров мне нужно программно связать абзац нескольких сотрудников с абзацем сектора.

...
$node = Node::load($id);
$sector = Paragraph::load($node->get('field_sector')->target_id);

/**
 * Список терминов таксономии загружен в другом месте.
 * Я добавил пользовательский элемент в выборку с сотрудниками "_all"
 * чтобы программно связать всех сотрудников с $sector.
 * 
 * массив @var $employees
 */
foreach ($employees как $employee) {
    $абзац = абзац::создать([
        'тип' => 'сотрудник',
    ]);
    $paragraph->set('field_name', $employee->get('field_name')->value);
    $paragraph->set('field_age', $employee->get('field_age')->value);
    ...
    $абзац->сохранить();

    $sector->set('field_employee', $paragraph); // здесь я не знаю, как добавить к сектору
    $сектор->сохранить();
}

Я попытался связать каждого сотрудника $ с сектором $, но с $sector->set('field_employee', $paragraph); синтаксис или с $sector->appendItem($paragraph), который работает для узлов, он не работает.

Есть ли способ программно добавить один абзац к другому?

Визуализируя вопрос на изображении ниже, когда я сохраняю объект с настраиваемой опцией «Все сотрудники» (_все) выбран, я хотел бы прикрепить все 4 сотрудника абзаца, связанные с абзацем «выбранный сектор» (удаление _все).

Заранее спасибо.

РЕДАКТИРОВАТЬ 1

Я видел предложенный ответ Программно добавить несколько абзацев в поле ссылки на сущность на узле но он решает, как прикрепить абзац к $узел, а не абзац к абзацу $узел.

Я пробовал также это:

$employee->setParentEntity($sector, 'field_of_reference');
$сотрудник->сохранить();

но все равно не добавляет $сотрудник к $сектор.

РЕДАКТИРОВАТЬ 2

Я пытаюсь следовать предложенным сообщениям, но не могу понять, как адаптировать этот код внутри крючок_form_submit().

В любом случае спасибо всем, я думаю, что это плохая конструкция моего кода.

Это форма объекта с абзацами внутри

Lambic avatar
флаг ph
Вы пробовали $sector->field_employee[] = $paragraph?
флаг ru
Отвечает ли это на ваш вопрос? [Программно добавить несколько абзацев в поле ссылки на объект на узле] (https://drupal.stackexchange.com/questions/236544/programmatically-append-multiple-paragraphs-to-entity-reference-field-on-node)
флаг ru
Вы пробовали НЕ сохранять дочерний объект, а только родительский объект?
leymannx avatar
флаг ne
Отвечает ли это на ваш вопрос? [Программно создавать вложенные абзацы] (https://drupal.stackexchange.com/questions/292832/create-nested-paragraphs-programmatically)
флаг in
Я постараюсь следить за этим постом. Возможно, вы правы, это проблема, связанная с сущностью, к которой нужно добавить абзац. Спасибо всем.
Рейтинг:1
флаг cn

Проблемы начинаются с того, как вы загружаете абзац. Вы не можете загрузить его как автономный объект:

$sector = Paragraph::load($node->get('field_sector')->target_id);

Вместо этого загрузите его через поле ссылки:

$sector = $node->get('field_sector')->entity;

Затем вы можете добавлять вновь созданные абзацы без сохранения, в том числе вложенные, а когда будете готовы, можете сохранить родительскую сущность.

Видеть Программное создание вложенных абзацев

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.