2016-04-17 2 views
4

Angenommen, ich habe einen Endpunkt für vom Benutzer übermittelte Formulare. Die Formulareingabe wird als JSON-Objekt in einer Spalte einer Datenbanktabelle gespeichert, und die Benutzer-ID wird in einer anderen gespeichert. Da ich nicht möchte, dass Benutzer irgendeine gewünschte Benutzer-ID festlegen können, habe ich die Spalte user_id aus der Variablen $ fillable des Eloquent-Modells herausgelassen.Eloquenz: Wie weise ich überwachten Spalten Werte zu, während ich die create() -Methode verwende?

Die create() -Methode akzeptiert ein Array von Schlüssel/Wert-Paaren, die zugewiesen werden sollen, weist jedoch nur ausfüllbaren Spalten Werte zu. Wie füge ich die ID des Benutzers gleichzeitig zur bewachten Spalte user_id hinzu? Muss ich die letzte Zeile holen und die Benutzerkennung als zweite Operation aktualisieren?

Danke für alle Hilfe, es ist sehr geschätzt.

Antwort

6

Wenn Sie kein Attribut in $fillable haben, heißt das nicht, dass Sie es nicht ausfüllen können.

Die $fillable-Eigenschaft enthält die Attribute, die mit der Methode create() oder fill() gefüllt werden können, Sie können jedoch weiterhin Werte für beliebige Attribute mithilfe des Eigenschaftszugriffs festlegen.

Nehmen wir an, Sie haben Modell mit email, something und else Eigenschaften. Sie setzen $fillable wie so:

protected $fillable = ['email', 'something']; 

Nun nehmen wir an, Sie Daten wie dieses:

$data = [ 
    'email' => '[email protected]', 
    'something' => 'foo', 
    'else' => 'bar', 
]; 

so jetzt, wenn Sie verwenden:

Model::create($data); 

Sie gefüllt haben, werden email und something denn die sind in $fillable und else werden nicht gefüllt, weil es nicht ist, aber Sie können immer etwas tun:

$model = new Model($data); 
$model->else = 'bar'; 
$model->save(); 

so können Sie sich hier else Eigenschaftswert festgelegt, auch wenn es nicht drin ist $fillable aber Sie müssen es wie normale Eigenschaft zuzugreifen.

+0

Also kann ich einfach die Daten als Argument der Modellinstanziierung einfach so übergeben? –

+1

@AuroraSchmidt Ja können Sie, aber nur füllbare Argumente sollten gefüllt werden und dann können Sie nicht-füllbare füllen und schließlich das Modell speichern –

+0

Schön! Danke für deinen Rat. :) –

0

Während nicht genau die create() Methode, können Sie forceCreate() verwenden - funktioniert in 5.5, obwohl es nicht zu dokumentieren scheint.