Laravel 5: Modell->fill() ignoriert $fillable Eigenschaft in unit-tests
Ich habe eine Benutzer-controller mit den folgenden Validierungsregeln:
public function store(Request $request)
{
...
$this->validate($request, [
'name' => 'required',
'email' => 'email|required|unique:users',
'password' => 'confirmed|max:32|min:8|required',
'roles' => 'exists:roles,id|required',
]);
$user = new User();
$user->fill($request->all());
...
}
Meine User.php Modell definiert die befüllbar-Eigenschaften:
protected $fillable = ['name', 'email'];
Übergeben werden, die confirmed
Validierung habe ich zu senden password
und password_confirmation
Felder in der POST-Anforderung.
Während der Entwicklung funktioniert alles einwandfrei, aber in der unit-tests ich bin immer ein Datenbank Fehler. Es versucht zum einfügen von Daten in eine password_confirmation Spalte. Es ist wie es ignoriert die $fillable
array.
Weiß ich über die "laravel Verluste event-Handler, die zwischen den tests" bug/Problem (https://github.com/laravel/framework/issues/1181). Also ich denke, dass vielleicht ich ' m fehlt, um eine Modell-Funktion abgesehen von Model::boot()
(ich nenne User::boot()
im test setUp()
- Funktion).
Dank,
Bearbeiten
Lesen der Model.php Quelle, die ich gefunden habe, dass jemand anruft Model::unguard()
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Model.php#L2180 nach der setUp () - Funktion und vor dem test. Wenn ich den Anruf User::reguard()
am Anfang der test geht es, aber (ich weiß nicht, warum), die unguard() und reguard() Funktionen mehrfach aufgerufen und der test wird wirklich langsam.
InformationsquelleAutor rvignacio | 2015-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem gefunden: die Basis-seeder in v5.0.x nur als Modell::unguard () ( https://github.com/laravel/laravel/blob/v5.0.22/database/seeds/DatabaseSeeder.php#L15 ), während v5.1.x wurde aktualisiert und Hinzugefügt, ein call-Modell::reguard() (https://github.com/laravel/laravel/blob/v5.1.0/database/seeds/DatabaseSeeder.php#L19) (ich war mit v5.0.22).
InformationsquelleAutor rvignacio
Befüllbar gilt nur für MassAssignment. Wenn Sie eine neue Instanz zu erstellen, wie das, was Sie tun oben, du bist nicht die Auslösung der Masse Zuordnung Ereignis.
Könnte man etwas wie das hier tun:
Wenn Sie beim erstellen der Benutzer sowieso, könnte man genauso gut tun:
Wenn Sie nur wollen, zu instanziieren des Benutzers, ohne beibehalten der Daten, die man tun könnte etwas wie diese:
Model::create($attributes)
endet Aufruf derModel::fill()
- Funktion, siehe Eloquent/Model.php Quelle. Das problem ist, dass es im Einklang mit den $fillable array in dev aber nicht in den tests.InformationsquelleAutor Jazerix