私はDrupal 8にプログラムで投票の選択肢を保存していました。私はDrupal8の投票の選択肢モジュールを使用しました。
$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();
次のスニペットは正常に動作しています。
$node_poll->choice->setValue(
[
['target_id' => 13]
],
[
['target_id' => 14]
],
[
['target_id' => 15]
]
);
ターゲットIDを動的に保存する方法を教えてください。
私はあなたのコードをこのように書き直します。
N.B .:これは元の回答を編集したものであり、コメントから得られたいくつかの有用なポイントに従っています。
$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();
これでうまくいきますように!
配列のような複数値フィールドを操作できます。フィールドインターフェイスはこれを変換してデータベースに格納します。それをさらに単純化するには:
$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();
これにより、IDがフィールドに追加され、既存のIDは上書きされません。これを行う場合は、最初に空の配列を設定できます。