テキストフィールドとテキストフォーマットフィールドを含む段落タイプがあります。このタイプの段落を無制限に取るコンテンツタイプもあります。
段落タイプは「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();
}
しかし、このアクションを実行すると、ノードにいくつかの質問段落が追加されますが、それらは完全に空であり、削除することもできません。何が欠けていますか?作成した複数の段落をノードのエンティティ参照フィールドにどのように追加しますか?
段落を追加するときは、リビジョンIDも渡す必要があります。
$node->field_qs_and_as[] = [
'target_id' => $paragraph->id(),
'target_revision_id' => $paragraph->getRevisionId(),
];