Używam Laravel 4.2.
błąd, który widzisz
[Illuminate\Database\Eloquent\MassAssignmentException]
username
w rzeczywistości jest tak, ponieważ baza danych jest chroniona przed masowym wypełnianiem, co robisz podczas wykonywania siewnika. Jednak moim zdaniem nie jest konieczne (i może być niebezpieczne) deklarowanie, które pola powinny być wypełnione w twoim modelu, jeśli potrzebujesz tylko wykonać siewnik.
W swoim folderze początkowym masz klasę DatabaseSeeder:
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
//$this->call('UserTableSeeder');
}
}
Ta klasa działa jak fasada, wymieniając wszystkie siewniki, które należy wykonać. Jeśli wywołasz siewnik UsersTableSeeder ręcznie przez rzemieślnika, tak jak w przypadku php artisan db:seed --class="UsersTableSeeder"
polecenia, pominiesz tę klasę DatabaseSeeder.
W tej klasie DatabaseSeeder polecenie Eloquent::unguard();
umożliwia tymczasowe przypisanie masy do wszystkich tabel, co jest dokładnie tym, czego potrzebujesz podczas wypełniania bazy danych. Ta metoda unguard jest wykonywana tylko po uruchomieniu php aristan db:seed
polecenia, dlatego jest tymczasowa, w przeciwieństwie do umożliwienia wypełniania pól w modelu (jak podano w zaakceptowanych i innych odpowiedziach).
Wszystko, co musisz zrobić, to dodać $this->call('UsersTableSeeder');
do metody run w klasie DatabaseSeeder i uruchomić php aristan db:seed
w swoim CLI, który domyślnie będzie wykonywał DatabaseSeeder.
Zauważ również, że używasz liczby mnogiej Users, podczas gdy Laraval używa liczby pojedynczej User. Jeśli zdecydujesz się zmienić klasę na tradycyjną liczbę pojedynczą, możesz po prostu odkomentować tę, //$this->call('UserTableSeeder');
która została już przypisana, ale domyślnie zakomentowana w klasie DatabaseSeeder.