So legen Sie programmgesteuert den Wert für ein mehrwertiges Feld in Drupal 8 fest

8

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?

harte_behl_0007
quelle
1
Ich habe Ihre Frage etwas aufgeräumt. Können Sie sie überprüfen und sicherstellen, dass ich alles richtig gemacht habe?
Stefanos Petrakis
Ja, aber ich brauche eine Antwort. Könnten Sie bitte helfen? In Drupal 7 funktionierte das Array einwandfrei. Ich meine, wenn ein Pass Werte im Array funktioniert, funktionieren sie, aber in Drupal 8 funktioniert das Übergeben von Werten im Array nicht.
harte_behl_0007
Hallo @harsh, ich habe gerade gesehen, dass Sie eine andere Antwort als richtig gewählt haben. Könnten Sie uns ein Feedback zum Grund geben? Ein Kommentar? Wäre sehr nützlich.
Stefanos Petrakis

Antworten:

16

Ich würde Ihren Code so umschreiben.
NB: 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!

Stefanos Petrakis
quelle
1
Danke für die Hilfe. Ich bin ein Neuling in drupal8. Vielen Dank, dass Sie meine Stunden gespart haben.
harte_behl_0007
1
Bitte schön. Hast du es damals versucht und es funktioniert? Wenn ja, sollten Sie auch die Antwort akzeptieren. Wenn nicht, lassen Sie es mich wissen und wir können dies weiter untersuchen.
Stefanos Petrakis
1
Zwei Anmerkungen: $ node_poll als Variable macht keinen Sinn, Umfragen in D8 sind keine Knoten. Zweitens können Sie auch direkt $ poll-> choice-> appendItem (13) aufrufen. usw. in einer Schleife, viel einfacher.
Berdir
5

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.

4k4
quelle