web-dev-qa-db-fra.com

Ajouter par programme plusieurs paragraphes au champ de référence d'entité sur le nœud

J'ai un type de paragraphe qui contient un champ de texte et un champ de format de texte. J'ai également un type de contenu qui prend un nombre illimité de paragraphes de ce type.

Le type de paragraphe est appelé "questions_et_ réponses" et les deux champs sont "field_question" et "field_answer". Je voudrais pouvoir ajouter par programmation des paragraphes "questions_et_répondeurs" à un type de contenu.

Dans l'exemple ci-dessous, je récupère le contenu d'un champ "double" et les importe dans le champ de référence de paragraphe. Voici mon code jusqu'à présent.

    $nids = \Drupal::entityQuery('node')
        ->condition('type', 'faq')
        ->execute();
    foreach ($nids as $nid) {
        $node      = \Drupal\node\Entity\NODE::load($nid);
        $questions = $node->field_questions_and_answers->getValue();
        foreach ($questions as $question) {
            $q         = $question['first'];
            $a         = $question['second'];
            $paragraph = Paragraph::create([
                    'title'          => $q,
                    'type'           => 'questions_and_answers',
                    'field_question' => $q,
                    'field_answer'   => $a,
                ]);
            $paragraph->save();
            $node->field_qs_and_as[] = $paragraph->id();
        }
        $node->save();
    }

Cependant, lorsque j'exécute cette action, le nœud reçoit un certain nombre de paragraphes de questions ajoutés, mais ils sont complètement vides et ils ne peuvent même pas être supprimés. Qu'est-ce que je rate? Comment ajouter plusieurs paragraphes que vous avez créés à un champ de référence d'entité sur un nœud?

3
Matt

Lorsque vous ajoutez un paragraphe, vous devez également transmettre l'ID de révision:

  $node->field_qs_and_as[] = [
    'target_id' => $paragraph->id(),
    'target_revision_id' => $paragraph->getRevisionId(),
  ];
11
4k4