Wohin mit Enums in Laravel?
Laravel hat ein <select>
Formular-helper das als Eingabe ein Wörterbuch. Ich mag zu halten die Werte für alle diese an einem zentralen Ort. Ich könnte zum Beispiel eine enum, die wie folgt aussieht:
$phoneTypes = [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
];
Denen will ich in meinem view/template und in der Datenbank:
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->enum('pri_phone_type',array_keys($phoneTypes));
...
});
- Gibt es eine empfohlene Ort, um diesen?
- Kann ich Sie global, deshalb kann ich leicht auf Sie zugreifen in der alle meine Ansichten?
InformationsquelleAutor der Frage mpen | 2014-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Persönlich würde ich es vermeiden, einen
enum
DB-Spalte Typ zusammen. Datenbankenum
Spalte Arten kann problematisch sein, siehe hier für einen Artikel zu diesem Thema.Umgang mit enums in der DB über Beziehungen
Wenn Sie wirklich wollen, um verwalten Sie Ihre Liste in der Datenbank, ich würde erstellen Sie eine separate
phone_types
Datenbank-Tabelle, und erstellen Sie eine Beziehung mit Ihremcustomers
Tabelle.Umgang mit enums im code über Laravel config
Es ist auch Recht einfach zu verwalten Sie Ihre enums im code vermeiden, und die DB komplett.
Da bist du mit Laravel, ich denke, die Einrichtung einer config-Datei wäre eine sinnvolle option.
Sagen, dass Sie eine neue Datei erstellen
config/enums.php
mit den folgenden:Können Sie nun mit der hand, die aus der Formular-helper ganz einfach:
InformationsquelleAutor der Antwort jszobody
Ich bin nicht einverstanden mit der akzeptierten Antworten hier. Ich fühle, dass enums kann sehr nützlich sein für diese Art der Sache. Ich bevorzuge die Behandlung von Enumerationen, die als Typen, und die Methoden implementieren, die Sie benötigen, auf Enum-Basis-Klasse um Ihnen die Funktionalität, die Sie benötigen, wie immer ein Wörterbuch.
Mein einfaches Beispiel:
Beispiel:
Sehen PHP und Aufzählungen für weitere details und eine mehr in die Tiefe Beispiel.
InformationsquelleAutor der Antwort Banford
Gebäude auf @Banfords Antwort, mit PHP7 Konstanten können nun arrays:
InformationsquelleAutor der Antwort Kirill Fuchs
Hatte gerade ähnliches Problem, bei mir Eloquent Accessoren und Mutatoren am besten funktioniert. Für diese Frage würde es gehen wie:
Bitte beachten Sie, dass in der Datenbank zu speichern, sollten Sie numerische Werte, wobei 0-Zelle, 1 Haus und 2 ist Arbeit. Zweitens wäre es sinnvoll, die übersetzungen hier statt geschütztes Eigentum.
InformationsquelleAutor der Antwort lchachurski
Zusätzlich zu @Banford Antwort:
Ich habe vor kurzem ein Paket zusammengestellt, die das arbeiten mit den Enumerationen in Laravel viel schöner. Es ist eine Kombination von verschiedenen Implementierungen, die ich gefunden hatte, während der recherche, wie Sie die sehr gleiche Sache (also warum ich hier bin).
https://github.com/BenSampo/laravel-enum
In diesem Fall könnten Sie etwas wie die folgende:
Können die Werte dann zugegriffen werden mit:
Ich würde empfehlen, immer die Werte zu ganzen zahlen und anschließend speichert Sie in der DB als int-Werte.
Den base Enum-Klasse hat Methoden, um alle Schlüssel und Werte als arrays. Das Paket bietet auch ein paar andere Vorteile, die nützlich sein können, in diesem Fall, wie die Bestätigung - so, dass ein Benutzer nicht hinzufügen, ein nicht existierender Wert in die DB.
Gibt es auch einen generator, der ist ziemlich praktisch.
Ich hoffe, dies ist nützlich für jemanden.
InformationsquelleAutor der Antwort BenSampo