web-dev-qa-db-ja.com

ノード上のエンティティ参照フィールドにプログラムで複数の段落を追加する

テキストフィールドとテキストフォーマットフィールドを含む段落タイプがあります。このタイプの段落を無制限に取るコンテンツタイプもあります。

段落タイプは「questions_and_answers」と呼ばれ、2つのフィールドは「field_question」と「field_answer」です。プログラムで「questions_and_answers」段落をコンテンツタイプに追加できるようにしたいと思います。

以下の例では、「double」フィールドからコンテンツを取得し、それらを段落参照フィールドにインポートしています。これが私のコードです。

    $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();
    }

しかし、このアクションを実行すると、ノードにいくつかの質問段落が追加されますが、それらは完全に空であり、削除することもできません。何が欠けていますか?作成した複数の段落をノードのエンティティ参照フィールドにどのように追加しますか?

3
Matt

段落を追加するときは、リビジョンIDも渡す必要があります。

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