Tôi có một mô-đun tùy chỉnh tạo loại trường. Đó là một trường văn bản thuần túy và tôi đã thêm nó vào một loại nội dung bằng giao diện người dùng Drupal. Bản số của trường này là "Không giới hạn".
Đây là cách tôi tạo trường trong mã:
lớp MyItem mở rộng FieldItemBase {
/**
* {@inheritdoc}
*/
lược đồ hàm tĩnh công khai (FieldStorageDefinitionInterface $field_definition) {
trở lại [
'cột' => [
'giá trị' => [
'loại' => 'văn bản',
'kích thước' => 'nhỏ',
'không rỗng' => SAI,
],
'giá trị an toàn' => [
'loại' => 'văn bản',
'kích thước' => 'nhỏ',
'không rỗng' => SAI,
],
],
];
}
/**
* {@inheritdoc}
*/
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties['value'] = DataDefinition::create('string')
->setLabel(t('Giá trị'));
$properties['safevalue'] = DataDefinition::create('string')
->setLabel(t('Giá trị an toàn'))
-> setComputing(TRUE);
trả lại thuộc tính $;
}
}
Như bạn có thể thấy, có hai cột: giá trị
được cho là lưu trữ đầu vào thô của người dùng. giá trị an toàn
được cho là lưu trữ một phiên bản dữ liệu đã được làm sạch.
Để thử nghiệm điều này. Tôi chỉ làm điều này bên trong hook_node_presave()
:
function mymodule_node_presave(\Drupal\Core\Entity\EntityInterface $entity) {
switch ($entity->getBundle()) {
trường hợp 'mybundle':
$entity->field_myfield = ['một', 'hai', 'ba'];
$entity->field_myfield->safevalue = ['one', 'two', 'three'];
nghỉ;
}
}
Nếu trường có lực lượng 1 (nghĩa là các giá trị được chèn là vô hướng), thì điều này hoạt động tốt.
Tuy nhiên, nếu tôi chèn mảng, khi tôi kiểm tra cơ sở dữ liệu và xem bảng nút__field_myfield
, tôi thấy rằng các cột trường_myfield_value
và trường_myfield_safevalue
cả hai tồn tại với cấu hình giống hệt nhau.
Nếu tôi tạo một nút bằng giao diện người dùng, tôi quan sát thấy điều này:
trường_myfield_value
cột chứa ba hàng với các chuỗi 'một', 'hai' và 'ba'. Đúng rồi.
trường_myfield_safevalue
có chuỗi 'Mảng' ở hàng đầu tiên và NULL ở hai hàng khác. Sai rồi.
Tôi đoán rằng điều khiến mọi thứ trở nên sai lầm là do đây là trường đa giá trị và tôi cần sử dụng một số hành động khác để đưa các giá trị vào chính xác.
Làm cách nào để tôi có thể chèn đúng trường đa giá trị vào giá trị an toàn
cột?