Lập trình cập nhật một trường tham chiếu thực thể


23

Tôi biết tôi có thể cập nhật (hoặc đặt giá trị cho) trường tham chiếu thực thể trong Drupal 7 với mã tương tự như sau.

 $node['field_code_used_by'][LANGUAGE_NONE][0]['target_id'] = $id;

Tôi muốn lập trình một giá trị cho trường tham chiếu thực thể người dùng của mình trong Drupal 8.

Tôi đã thử với $node->field_code_used_by->setValue(1);$node->field_code_used_by->entity->value = 1;không ai trong số họ làm việc.

Làm cách nào tôi có thể đặt giá trị cho trường tham chiếu thực thể?

Câu trả lời:


31

Bạn cần sử dụng mã tương tự như sau.

    $node = Node::load($nid);     
    $node->field_code_used_by->target_id = $user_id;
    $node->save();

Đối với trường nhiều giá trị, để thêm giá trị vào cuối danh sách, hãy sử dụng mã sau đây.

$node->field_code_used_by[] = ['target_id' => $user_id];

Một cách khác là thiết lập thuộc entitytính với đối tượng thực thể, như trong đoạn mã sau.

    $node = Node::load($nid);
    $user = \Drupal\user\Entity\User::load(1);
    $node->field_code_used_by->entity = $user;
    $node->save();

2
Điều này dường như không hoạt động trừ khi nút cha đã tồn tại. Khi gán thuộc tính target_id hoặc thực thể cho nút cha mới, chưa được lưu, mối quan hệ không được lưu. (Có thể cũng không hoạt động khi gán cho trường tham chiếu thực thể NULL, nhưng tôi chưa kiểm tra điều đó.) Có ai biết cách giải quyết trường hợp này không?
aaronbauman

@aaronbauman bạn có giải pháp nào cho nó không?
tiếng vang

@echo tôi không nhớ làm thế nào hoặc nếu tôi làm việc xung quanh này. Nếu mô tả của tôi về hành vi là chính xác, đây là một lỗi. Nếu không có vấn đề mở trên drupal.org cho nó, thì nên có
aaronbauman

@aaronbauman drupal.org/project/par Đoạns /issues / 237017 # comment-11872624 đã giúp tôi thực hiện công việc đó với nút mới. Vì vậy, dường như không phải là một lỗi.
tiếng vang

11

Giống như trong D7, thuộc tính chính của trường tham chiếu trong D8 vẫn là target id:

$node->field_code_used_by->target_id = $user_id;

Tài entitysản là một giá trị tính toán. Nếu bạn đặt một đối tượng vào giá trị này, drupal sẽ chuyển đổi nó trở lại id trước khi lưu nó vào dababase.

Các trường đa trị

Thêm một mục vào trường đa trị liệu:

$node->field_code_used_by[] = ['target_id' => $user_id];

Thuộc tính target_idkhông cần thiết, vì nó là thuộc tính chính và được sử dụng theo mặc định. Vì vậy, đối với hầu hết các trường, bạn có thể thêm một giá trị như trong một mảng php đơn giản, dễ nhớ:

$node->field_code_used_by[] = $user_id;

Làm thế nào về các trường tham chiếu thực thể cho phép nhiều giá trị?
Brian
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.