Eloquentes ORM: Definiere erlaubte Modellattribute

7

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?

    
cweiske 11.11.2016, 12:52
quelle

6 Antworten

4

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 :

%Vor%

Dann in den Modellen, die ungültige Attribute nicht zulassen sollten, können Sie dieses Basismodell erweitern:

%Vor%     
Paul 12.12.2016, 10:14
quelle
5

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%     
Tomas Buteler 06.12.2016 09:38
quelle
5

Sie könnten den Modellkonstruktor überschreiben und dort validieren:

%Vor%     
alepeino 06.12.2016 19:58
quelle
4

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:

%Vor%

Damit dies funktioniert, fügen Sie alle zulässigen Werte hinzu, die Sie in $fillable speichern möchten Array:

%Vor%     
Alexey Mezenin 11.11.2016 12:56
quelle
2

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.

    
Ehtasham Nasir 11.11.2016 13:14
quelle
1

Wenn ich Sie richtig verstehe, kann Ihnen Eloquent Events helfen. Sie könnten dann das Eingabearray mit dem ausfüllbaren Array vergleichen.

    
michaeltintiuc 11.12.2016 16:35
quelle

Tags und Links