Cách đặt giá trị cho trường đa giá trị trong drupal 8 theo chương trình


8

Tôi đã lưu các lựa chọn thăm dò ý kiến ​​theo chương trình trong Drupal 8. Tôi đã sử dụng mô-đun lựa chọn Thăm dò ý kiến ​​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();

Đoạn mã sau đang hoạt động tốt.

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

Làm thế nào tôi có thể, làm cho id mục tiêu được lưu động?


1
Tôi đã làm sạch câu hỏi của bạn một số, bạn có thể kiểm tra nó và đảm bảo tôi có mọi thứ đúng không?
Stefanos Petrakis

Vâng, nhưng tôi cần một câu trả lời cho nó, bạn có thể vui lòng giúp đỡ? Trong Drupal 7 Array đã hoạt động tốt. Ý tôi là nếu một giá trị pass trong mảng thì chúng sẽ hoạt động nhưng trong drupal 8 giá trị truyền trong mảng không hoạt động.
khắc nghiệt_behl_0007

Xin chào @harsh, tôi chỉ thấy rằng bạn đã chọn một câu trả lời khác là chính xác. Bạn có thể cung cấp một số thông tin phản hồi về lý do? Một số bình luận? Sẽ rất hữu ích.
Stefanos Petrakis

Câu trả lời:


16

Tôi sẽ viết lại mã của bạn như thế này.
NB: Đây là phiên bản chỉnh sửa của câu trả lời gốc, sau một số điểm hữu ích đến từ các bình luận.

$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();

Hy vọng điều này làm điều đó!


1
Cảm ơn đã giúp đỡ. Tôi là người mới trong drupal8 cảm ơn rất nhiều bạn đã tiết kiệm hàng giờ của tôi.
khắc nghiệt_behl_0007

1
Không có gì. Bạn đã thử nó sau đó và nó hoạt động? Nếu vậy, bạn cũng nên chấp nhận câu trả lời. Nếu không, hãy cho tôi biết, và chúng ta có thể xem xét điều này hơn nữa.
Stefanos Petrakis

1
Hai lưu ý: $ node_poll là một biến không có ý nghĩa, các cuộc thăm dò trong D8 không phải là các nút. Thứ hai, bạn cũng có thể chỉ cần gọi trực tiếp $ poll-> sự lựa chọn-> appendItem (13); vv trong một vòng lặp, đơn giản hơn rất nhiều.
Berdir

5

Bạn có thể làm việc với các trường đa giá trị như một mảng. Giao diện trường sẽ dịch cái này để lưu nó trong cơ sở dữ liệu. Để đơn giản hóa hơn nữa:

$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();

Điều này sẽ thêm id vào trường, không ghi đè lên những cái hiện có. Nếu bạn muốn làm điều này, bạn có thể đặt một mảng trống ở đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.