Kann jemand bitte erklären, welchen Vorteil die Verwendung der Fields-API zum Erstellen von Feldern für eine Entität hat, anstatt sie nur in hook_schema als Werte zu deklarieren?
Es ist ein bisschen Arbeit, alle Felder, Instanzen, Optionen, zulässigen und Standardwerte usw. zu definieren, und dann müssen Sie sich mit Gettern und Setzern befassen, und schließlich ist die Deinstallation nicht so einfach wie db_delete, insbesondere wenn Sie Referenzfelder haben in Verwendung durch andere Entitäten.
Wie im Kommentar zu Clives Antwort erwähnt, werden die meisten Punkte von Clive ungültig, wenn eine benutzerdefinierte Entität auf den Controllern der Entity-API erstellt wird. Sie erhalten CRUD, Entitätseigenschaften *, Sie können Ihre Entität einfach exportierbar machen, EFQ-Unterstützung und sogar die Integration von Ansichten kostenlos. Und Sie haben eine bessere Leistung, da sich Ihre Daten in einer einzigen Tabelle befinden und Sie die Felddefinitionen nicht herumtragen müssen.
Die Verwendung von Feldern bietet jedoch noch einige Vorteile:
Die Feld-Benutzeroberfläche, mit der Sie Ihrer Entität zusätzliche Felder hinzufügen können. Für eine wiederverwendbare Entität möchten Sie sie möglicherweise auch dann feldfähig machen, wenn Sie selbst keine Felder hinzufügen.
Wird basierend auf dem Schema generiert, daher müssen Sie sie wahrscheinlich ein wenig optimieren und den richtigen Typ hinzufügen (Boolescher Wert, Datum anstelle von int usw.).
quelle
Berdir und Clive haben vollkommen recht.
In der Praxis habe ich nur einen Grund gefunden, keine Felder zu verwenden: Datenbankleistung. Jedes Schreiben / Aktualisieren eines Feldes verursacht zwei INSERT-Anweisungen. Wenn Sie 50 Felder haben und einen node_save () ausführen, werden 100 INSERTs ausgelöst.
Bitte beachten Sie, dass dies nicht wichtig ist, wenn Sie einige tausend Knoten haben und einige Male pro Stunde darauf schreiben. Das Aktualisieren von 10 Millionen Knoten in einem Stapel ist jedoch eine andere Geschichte. In solchen Situationen sollten Sie an eine benutzerdefinierte Entität denken, die auf den Controllern der Entity-API basiert, wie von berdir erwähnt, oder sich einen alternativen Speicher wie MongoDB ansehen .
quelle