web-dev-qa-db-ja.com

プログラムでdrupal 8の複数値フィールドに値を設定する方法

私は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を動的に保存する方法を教えてください。

7
harsh_behl_0007

私はあなたのコードをこのように書き直します。
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();

これでうまくいきますように!

15

配列のような複数値フィールドを操作できます。フィールドインターフェイスはこれを変換してデータベースに格納します。それをさらに単純化するには:

$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は上書きされません。これを行う場合は、最初に空の配列を設定できます。

3
4k4