Gibt es in Laravels eloquenten ORM eine Möglichkeit, die zulässigen Attribute eines Modells zu definieren?
Standardmäßig kann ich beliebige Attribute in den Konstruktor des Modells einfügen - aber dann werde ich nur über die fehlerhaften Attributnamen benachrichtigt, wenn ich versuche, das Modell in der Datenbank zu speichern.
Beispielcode:
%Vor%Gibt es also eine Möglichkeit, Laravel automatisch prüfen zu lassen, ob in den Eingabedaten der Anfrage ungültige Schlüssel enthalten sind?
Wenn Sie verhindern möchten, nicht nur nicht erlaubte Attribute mit fill()
-Methode zu füllen, sondern diese auch direkt zu setzen, wie $model->foo = 'bar'
, dann müssen Sie Model::setAttribute()
method überschreiben.
Am besten in einem benutzerdefinierten Basismodell, das Eloquent erweitert. Also in app/Model.php
:
Dann in den Modellen, die ungültige Attribute nicht zulassen sollten, können Sie dieses Basismodell erweitern:
%Vor%Ich glaube nicht, dass das nativ gemacht werden kann. Ich denke, dass Laravel in diesem Sinne absichtlich freizügig ist, und es macht mir persönlich nichts aus, einen SQL-Fehler anstelle eines beredten zu haben, wenn ich einen Fehler begehe, Attribute irgendwo zu setzen.
Abgesehen davon ist es nicht schwer, Ihre Modelle so anzupassen, dass sie fehlschlagen, wenn nicht vorhandene Attribute gesetzt sind:
%Vor% Wenn Sie solche Attribute hinzufügen, verwendet Laravel das < a href="https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L441"> fill()
Methode, die Teil von Massenzuweisung Funktion:
Damit dies funktioniert, fügen Sie alle zulässigen Werte hinzu, die Sie in $fillable
speichern möchten Array:
Sie können laravel exists verwenden: Spaltenvalidierungsregel für jede Eingabe.
Bitte überprüfen Sie die Dokumentation Ссылка
ODER
Sie können Helfer für diesen Zweck machen
$ table ist Tabellenname
%Vor%Es wird die unbekannte Spaltenliste im Array zurückgegeben.
Wenn ich Sie richtig verstehe, kann Ihnen Eloquent Events helfen. Sie könnten dann das Eingabearray mit dem ausfüllbaren Array vergleichen.