Який правильний спосіб програмного видалення одного конкретного запису поля для полів з декількома записами від однієї конкретної сутності? (це конкретні поля та конкретні сутності, а не типи полів чи екземпляри та типи сутностей)
Ось кілька можливостей, які я розглянув, які не працюють:
- Завантажуючи сутність за допомогою
entity_load()
, встановлюючи запис для поля на = null або = array (), а потім зберігайте за допомогоюfield_attach_update()
. Це найближче, що я знайшов, але він залишає запис нульового поля зомбі в базі даних, який відображається як порожній рядок у формах, поки форма не буде збережена і неhook_field_is_empty()
може натиснути (hook_field_is_empty()
налаштована так, що = null або = array () буде позначено прапором як порожній). - Завантаження об'єкта за допомогою
entity_load()
, скидання поля поля за допомогою ключа, а потім збереження за допомогоюfield_attach_update()
. Це, здається, нічого не робить - схоже, що Drupal трактує запис, що його немає, як знак, щоб не змінювати його. (як не дивно, я також інколи отримую максимальні терміни закінчення строку запиту при спробі такого підходу) field_attach_delete()
- це занадто тупо: це вбиває всі поля для сутностіfield_purge_data()
- краще, але все ще занадто тупо: це вбиває всі записи поля, а не конкретні записи
Щоб уточнити, у мене є код, який знаходить (і завантажує) сутність, у якої є поле, яке містить декілька записів, і знаходить конкретну запис у тому полі, яке потрібно видалити. Я хочу видалити цей запис повністю, не торкаючись будь-яких інших записів чи будь-яких інших полів об'єкта.