2016-10-07 1 views
18

Wie wird der Standardwert eines Attributs in einem Laravel-Modell festgelegt?So legen Sie den Standardwert eines Attributs für ein Laravel-Modell fest

Sollte ich den Standard beim Erstellen einer Migration festlegen oder sollte ich es in der Modellklasse festlegen?

+0

http://stackoverflow.com/questions/18747500/how-to-set-a-default-attribute-value-for- a-laravel-eloquent-model – StateLess

+0

Mögliches Duplikat von [Wie setze ich einen Standard-Attributwert für ein Laravel/Eloquent-Modell?] (https://stackoverflow.com/questions/18747500/how-to-set-a-default- Attribut-Wert für ein Laravel-eloquent-Modell) –

Antwort

27

Sie Standard-Attribut im Modell festlegen können auch>

protected $attributes = [ 
     'status' => self::STATUS_UNCONFIRMED, 
     'role_id' => self::ROLE_PUBLISHER, 
    ]; 

Sie können die Details in diesen Links finden

1.) How to set a default attribute value for a Laravel/Eloquent model?

2.) https://laracasts.com/index.php/discuss/channels/eloquent/eloquent-help-generating-attribute-values-before-creating-record


können Sie verwenden auch Accessoren & Mutatoren für dieses Sie die Details in der Dokumentation Laravel finden 1.) https://laravel.com/docs/4.2/eloquent#accessors-and-mutators

2.) https://scotch.io/tutorials/automatically-format-laravel-database-fields-with-accessors-and-mutators

3.) Universal accessors and mutators in Laravel 4

+0

Dank, Attribut Standardeinstellung funktioniert als protected $ attributes = [ 'Status' => self :: STATUS_UNCONFIRMED, 'ROLE_ID' => self :: ROLE_PUBLISHER, ]; , aber als Mutatoren funktionierte es z.B. öffentliche Funktion setUserTypeAttribute ($ Wert) { $ this-> Attribute ['user_type'] = 'Benutzer'; } Ich möchte fragen, ob es einen Unterschied b/w diese Ansätze gibt, oder welche ist am besten. –

+0

Beide sind besser. Es liegt an dir. In Mutator habe ich Ihnen ein Beispiel gegeben, in dem Sie den Standardwert für eine leere oder benutzerdefinierte Bedingung festlegen können. Wie ? Öffentliche Funktion setUserTypeAttribute ($ Wert) Wert) ? 'Benutzer': $ value; } ' Ich hoffe, Sie haben meinen Punkt mit diesem Beispiel. – Manish

+0

@Zeeshan Bin Iqbal Hat dies Ihr Problem gelöst? – Manish

3

Sie sollten Standardwerte in migrations gesetzt:

$table->tinyInteger('role')->default(1); 
+2

Wenn Sie beispielsweise Modelle für die Formularvalidierung verwenden, möchten Sie einen Standardwert haben, bevor Sie sie in der Datenbank speichern. Wenn Sie Ihr Beispiel verwenden, müssen Sie den Datensatz der Datenbank hinzufügen, bevor Sie den Standardwert abrufen können, was umständlich ist. – Innovaat

+0

Nicht zu erwähnen, dass _some_ column types keine Standardwerte (wie Text) zulassen – Chris

+0

Viele Neulinge Jungs google, finden Sie diese Frage und Upvote Manish's Antwort (und downvote meins), aber ich glaube immer noch, dass die [best practice] (https://github.com/alexeymezenin/laravel-best-practices) soll dies möglichst in der Migrationsklasse ** erfolgen **. Außerdem kann ich nicht an den Fall denken, wenn Sie ein Formular validieren, und Sie müssen eine neue Zeile erstellen und dann einen Standardwert aus der DB abrufen, wie zuvor beschrieben. Wenn Sie während der Formularvalidierung einen beliebigen Standardwert erhalten, klingt das so, als würde ich das Rad neu erfinden. –

Verwandte Themen