Çok girişli bir alan için belirli bir alan girişini belirli bir varlıktan programlı olarak silmenin doğru yolu nedir? (bu, alan türleri veya örnekler ve varlık türleri değil, belirli alanlar ve belirli öğelerdir)
İşte içinde çalışmadığım bazı olasılıklar:
- Varlığı ile yükleme,
entity_load()
alan girişini = null veya = array () olarak ayarlayıp ardından ile kaydedinfield_attach_update()
. Bulduğum en yakın ama form kaydedilene ve formlarıhook_field_is_empty()
tekmeleyene kadar formlarda boş bir satır olarak görünen veritabanında bir zombi boş alan girişi bırakır (hook_field_is_empty()
= null veya = array () işaretlenecek şekilde yapılandırılır) boş olarak). entity_load()
Varlığı ile yükleme, alan girişini anahtarla ayırma ve sonra ile kaydetmefield_attach_update()
. Bu hiçbir şey yapmıyor gibi görünüyor - Drupal, orada bulunmayan girişi değiştirmemek için bir işaret olarak yorumluyor. (garip bir şekilde bu yaklaşımı denerken bazen maksimum sorgu süresi sona erme zaman aşımı da alıyorum)field_attach_delete()
- bu çok künt: varlık için tüm alanları öldürüyorfield_purge_data()
- daha iyi, ama yine de çok künt: alanın tüm girişlerini öldürür, belirli girişleri değil
Açıklığa kavuşturmak için, birden fazla girişi olan bir alana sahip olan ve bu alanda kaldırılması gereken belirli bir girişi bulan (ve yükleyen) bir kod buldum. Varlık üzerindeki diğer girişlere veya diğer alanlara dokunmadan bu girişi tamamen kaldırmak istiyorum.