Điểm:0

Làm cách nào tôi có thể xóa một giá trị trường theo chương trình?

lá cờ gb

Sử dụng Entity API, tôi biết cách lấy giá trị hoặc đặt giá trị:

$nid = $entity->id();
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
...
$nom = strtoupper($node->get('field_nom')->value);
$node->set('field_nom', $nom);
$node->save();

Nhưng có khả năng xóa một giá trị của trường này không?

Tôi đã cố gắng xóa trực tiếp giá trị trong cơ sở dữ liệu

$query =\Drupal::database()->delete('node__field_nom');
$query->condition('field_nom', $nom);
$query->execute();

Nhưng vì giá trị được lưu vào bộ đệm, nên nút phải tải lại hai lần để xem kết quả trên màn hình (một trường trống)

Điểm:2
lá cờ cn

Nội dung trường là một danh sách mục trường và thông thường bạn sẽ cần bao gồm một giá trị duy nhất trong một mảng. Thực tế là bạn có thể đặt một đại lượng vô hướng như trong ví dụ của mình là do mã bổ sung trong API trường phát hiện đại lượng vô hướng và chuyển nó vào danh sách mục trường với một giá trị duy nhất. Tuy nhiên, để xóa trường, bạn không thể đặt một đại lượng vô hướng trống, bởi vì điều này sẽ được hiểu là một mục trường duy nhất có giá trị trống đó.

Vì vậy, để xóa toàn bộ nội dung trường, hãy đặt một mảng trống:

$node->set('field_nom', []);

BTW bạn có thể lấy toàn bộ nội dung trường:

$values ​​= $node->get('field_nom')->getValue();

Thay đổi mảng $values ​​và đặt lại:

$node->set('field_nom', $values);
cocq avatar
lá cờ gb
Nó hoạt động :-) cảm ơn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.