Jaki jest właściwy sposób programowo usunąć jeden konkretny wpis pola dla pola wielokrotnego wpisu z jednego konkretnego obiektu? (to są określone pola i określone encje, a nie typy lub instancje pól i typy encji)
Oto kilka możliwości, które sprawdziłem i które nie działają:
- Ładowanie encji za pomocą
entity_load(), ustawienie wpisu pola na = null lub = array (), a następnie zapisywanie za pomocąfield_attach_update(). Jest to najbliższe, jakie znalazłem, ale pozostawia wpis zerowego pola zombie w bazie danych, który pojawia się jako pusty wiersz w formularzach, dopóki formularz nie zostanie zapisany ihook_field_is_empty()może się uruchomić (hook_field_is_empty()jest skonfigurowany tak, że = null lub = array () będzie oznaczać jak pusty). - Ładowanie encji za pomocą
entity_load(), odznaczanie pola wpisu kluczem, a następnie zapisywanie za pomocąfield_attach_update(). To wydaje się nic nie robić - wydaje się, że Drupal interpretuje nieistnienie wpisu jako znak, aby go nie modyfikować. (co dziwne, czasami próbuję tego podejścia uzyskać maksymalny limit czasu ważności zapytania) field_attach_delete()- to jest zbyt tępe: zabija wszystkie pola dla bytufield_purge_data()- lepiej, ale wciąż zbyt tępo: zabija wszystkie wpisy w polu, a nie konkretne wpisy
Aby to wyjaśnić, mam kod, który znajduje (i ładuje) byt, który ma pole zawierające wiele wpisów i znajduje określony wpis w tym polu, który należy usunąć. Chcę całkowicie usunąć ten wpis, nie dotykając żadnych innych wpisów ani żadnych pól w encji.