特定のエンティティから複数エントリフィールドの特定のフィールドエントリをプログラムで削除する適切な方法は何ですか?(つまり、フィールドタイプまたはインスタンスおよびエンティティタイプではなく、特定のフィールドおよび特定のエンティティです)
私が調べたいくつかの可能性がありますが、うまくいきません:
- でエンティティを読み込み、
entity_load()
フィールドエントリを= nullまたは= array()に設定してから保存しfield_attach_update()
ます。これは私が見つけた最も近いものですが、データベースにゾンビnullフィールドエントリを残し、フォームが保存されて起動できるようになるまでhook_field_is_empty()
(hook_field_is_empty()
= nullまたは= array()がフラグを立てるように設定されるまで)フォームの空白行として表示されます空として)。 - でエンティティをロードし、
entity_load()
キーでフィールドエントリを設定解除し、で保存しfield_attach_update()
ます。これは何もしないようです-Drupalは、エントリが存在しないことを、変更しないためのサインとして解釈しているようです。(奇妙なことに、このアプローチを試みると、クエリ時間の有効期限が最大になることもあります) field_attach_delete()
-これはあまりにも鈍い:エンティティのすべてのフィールドを殺すfield_purge_data()
-より良いが、それでも鈍い:特定のエントリではなく、フィールドのすべてのエントリを殺す
そのため、明確にするために、複数のエントリを持つフィールドを持つエンティティを検索(およびロード)し、そのフィールドで削除する必要がある特定のエントリを検索するコードを用意しました。エンティティの他のエントリや他のフィールドに触れることなく、そのエントリを完全に削除したい。