プログラムでWebform Submissionを作成/更新しようとしています。 Drupal 8 [〜#〜] api [〜#〜] に従って新しい提出物を作成する方法をすでに知っています。現在、更新メソッドを作成しようとしています。WebformモジュールのソースコードとAPIドキュメントを参照していますが、解決策が見つかりませんでした。 Drupal 8.3のwebform_get_submission
webform_submission_update
関数も削除されていると思います。
$values = [
'webform_id' => 'attendees_info',
'in_draft' => FALSE,
'uid' => $uid,
'langcode' => 'en',
'token' => 'at_'.$token,
'uri' => '/webform/attendees/api',
'remote_addr' => '',
'data' => [
'name' => $name,
'email' => $email,
'gallery_url' => 'gallery/'.$token,
],
];
$webform = Webform::load($values['webform_id']);
$is_open = WebformSubmissionForm::isOpen($webform);
if ($is_open === TRUE) {
// Validate submission.
$errors = WebformSubmissionForm::validateValues($values);
// Check there are no validation errors.
if (!empty($errors)) {
return $errors;
}
else {
// Submit values and get submission ID.
$webform_submission = WebformSubmissionForm::submitValues($values);
return $webform_submission->id();
}
}
上記は送信作成コードですが、更新メソッドの実行方法がわかりません。誰かが以前にこの問題に直面していますか?誰かがこれを助けてくれることを願っています、ありがとう。
\ Drupal\webform\WebformSubmissionInterface :: getData();と\ Drupal\webform\WebformSubmissionInterface :: setData($ data);を使用してみてください
// Load submission using sid.
/** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
$webform_submission = \Drupal\webform\Entity\WebformSubmission::load($sid);
// Get submission data.
$data = $webform_submission->getData();
// Change submission data.
$data['element_key'] = 'custom_element_value';
// Set submission data.
$webform_submission->setData($data);
// Save submission.
$webform_submission->save();
更新:クラス名の「エンティティー」に大文字の「E」を使用します。 (最近更新されました)。
jrockowitz'sabove コードは正しいクリーンなアプローチです。以下も動作し、共有したかっただけです。
$query = \Drupal::database()->merge('webform_submission_data');
$query->key([
'sid' => $sid,
'name' => 'your_custom_key',
])->fields([
'value' => 'your_value',
]);
$query->execute();