it-swarm.com.de

Festlegen des Werts für ein Feld mit mehreren Werten in drupal 8 programmgesteuert

Ich habe die Auswahlmöglichkeiten für Umfragen programmgesteuert in Drupal 8.) gespeichert. Ich habe das Modul zur Auswahl von Umfragen für Drupal8 verwendet.

$node_poll = Poll::load($pollid);
//print_r($node_poll);exit;
$i = array(13,14,15);
foreach($i as $key => $value){
  $node_poll->choice->setValue(
        [
            ['target_id' => $value]
        ]
  );
// But I want to save multiple target ids. now this is saving 15 all the time.

}
$node_poll->question->setValue([
  'value' => 'test',
]);
$node_poll->save();

Das folgende Snippet funktioniert einwandfrei.

$node_poll->choice->setValue(
        [
            ['target_id' => 13]
       ],
       [
            ['target_id' => 14]
       ],
        [
            ['target_id' => 15]
       ]
    );

Wie kann ich festlegen, dass Ziel-IDs dynamisch gespeichert werden?

7
harsh_behl_0007

Ich würde Ihren Code so umschreiben.
N.B.: Dies ist eine bearbeitete Version der ursprünglichen Antwort, die einige hilfreiche Punkte aus den Kommentaren enthält.

$poll = Poll::load($pollid);

$poll->question->setValue(['value' => 'test']);

$target_ids = array(13,14,15);
foreach($target_ids as $target_id){
  $poll->choice->appendItem($target_id);
}
$poll->save();

Hoffe das macht es!

15

Sie können mit mehrwertigen Feldern wie einem Array arbeiten. Die Feldschnittstelle übersetzt dies, um es in der Datenbank zu speichern. Um es noch weiter zu vereinfachen:

$target_ids = array(13,14,15);
$node_poll = Poll::load($pollid);
foreach($target_ids as $target_id) {
  $node_poll->choice[] = $target_id;
}
$node_poll->question->value = 'test';
$node_poll->save();

Dadurch werden die IDs zum Feld hinzugefügt und die vorhandenen nicht überschrieben. Wenn Sie dies tun möchten, können Sie am Anfang ein leeres Array festlegen.

3
4k4