Tôi đang sử dụng Laravel 4.2.
lỗi bạn đang thấy
[Illuminate\Database\Eloquent\MassAssignmentException]
username
thực sự là do cơ sở dữ liệu được bảo vệ khỏi việc lấp đầy hàng loạt, đó là những gì bạn đang làm khi thực hiện trình gieo hạt. Tuy nhiên, theo ý kiến của tôi, không cần thiết (và có thể không an toàn) để khai báo trường nào có thể điền vào mô hình của bạn nếu bạn chỉ cần thực thi trình gieo hạt.
Trong thư mục gieo hạt của bạn, bạn có lớp DatabaseSeeder:
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
//$this->call('UserTableSeeder');
}
}
Lớp này hoạt động như một mặt tiền, liệt kê tất cả các trình gieo hạt cần được thực thi. Nếu bạn gọi trình gieo hạt UsersTableSeeder theo cách thủ công thông qua thủ công, giống như bạn đã làm với php artisan db:seed --class="UsersTableSeeder"
lệnh, bạn sẽ bỏ qua lớp DatabaseSeeder này.
Trong lớp DatabaseSeeder này, lệnh Eloquent::unguard();
cho phép gán khối lượng tạm thời trên tất cả các bảng, đây chính xác là những gì bạn cần khi tạo cơ sở dữ liệu. Phương thức không chuẩn này chỉ được thực thi khi bạn chạy php aristan db:seed
lệnh, do đó nó chỉ tạm thời thay vì làm cho các trường có thể điền vào mô hình của bạn (như đã nêu trong các câu trả lời được chấp nhận và các câu trả lời khác).
Tất cả những gì bạn cần làm là thêm $this->call('UsersTableSeeder');
phương thức chạy trong lớp DatabaseSeeder và chạy php aristan db:seed
trong CLI của bạn, phương thức này theo mặc định sẽ thực thi DatabaseSeeder.
Cũng lưu ý rằng bạn đang sử dụng Tên lớp số nhiều Người dùng, trong khi Laraval sử dụng Người dùng dạng số ít. Nếu bạn quyết định thay đổi lớp của mình thành dạng số ít thông thường, bạn có thể chỉ cần bỏ ghi chú //$this->call('UserTableSeeder');
mà đã được gán nhưng được nhận xét theo mặc định trong lớp DatabaseSeeder.