Tôi cần lưu một giá trị mới vào một trường trên một thực thể và tôi đã tự hỏi liệu có thể sử dụng entity_metadata_wrapper hay chỉ có thể đặt giá trị hiện tại?
$wrapper->vimn_related_subjects[] = $value;
chưa
Tôi cần lưu một giá trị mới vào một trường trên một thực thể và tôi đã tự hỏi liệu có thể sử dụng entity_metadata_wrapper hay chỉ có thể đặt giá trị hiện tại?
$wrapper->vimn_related_subjects[] = $value;
chưa
Câu trả lời:
Khi xử lý các trường đa giá trị, đối tượng trình bao bọc siêu dữ liệu thực thể được liên kết là một phiên bản của EntityListWrapper (Có thể nên duyệt API để xem các phương thức có sẵn. Ngoài ra, lớp này thực hiện giao diện ArrayAccess )
Vì vậy, cách đơn giản nhất để thêm các giá trị mới vào EntityListWrapper là sử dụng toán tử "[]":
$wrapper->field_example[] = $new_value;
Điều này tạo ra một mục mới và gán cho nó giá trị. Với phương thức này, delta (phần bù trong danh sách giá trị) được tạo tự động. Bạn cũng có thể tự đặt bù nếu bạn muốn. Bất kỳ phương pháp nào trong ba phương pháp sau đều tương đương:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
Trong cả ba trường hợp, điều này sẽ ghi đè lên các giá trị nếu delta đã tồn tại và tạo một mục mới nếu không.
Bạn cũng có thể trực tiếp thiết lập một mảng giá trị trên chính trường đó. Cả hai phương pháp đều tương đương nhau:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
Tuy nhiên, điều này đòi hỏi bạn phải biết cấu trúc bên trong của trường mà bạn đang gán vì bạn không sử dụng trình bao bọc siêu dữ liệu của trường.
Cuối cùng, bạn có thể làm trống một trường đa giá trị bằng cách đặt nó thành một giá trị trống. Cả ba phương pháp đều tương đương nhau:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
là tùy chọn bù trừ duy nhất hoạt động cho trường tham chiếu phân loại đa giá trị của tôi.
Tôi thấy rằng
$wrapper->field_example[]->set($new_value);
là một thất bại nghiêm trọng. Nhưng
$wrapper->field_example[NULL]->set($new_value);
đa được phep.