ฉันใช้ Laravel 4.2
ข้อผิดพลาดที่คุณเห็น
[Illuminate\Database\Eloquent\MassAssignmentException]
username
แน่นอนว่าเป็นเพราะฐานข้อมูลได้รับการปกป้องจากการกรอกข้อมูลซึ่งเป็นสิ่งที่คุณกำลังทำเมื่อคุณดำเนินการกับ seeder อย่างไรก็ตามในความคิดของฉันไม่จำเป็น (และอาจไม่ปลอดภัย) ที่จะประกาศว่าช่องใดที่ควรกรอกในแบบจำลองของคุณหากคุณต้องการเพียงแค่เรียกใช้ seeder เท่านั้น
ในโฟลเดอร์ seeding ของคุณคุณมีคลาส DatabaseSeeder:
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
//$this->call('UserTableSeeder');
}
}
คลาสนี้ทำหน้าที่เป็นส่วนหน้าแสดงรายชื่อผู้เริ่มต้นทั้งหมดที่จำเป็นต้องดำเนินการ หากคุณเรียกใช้ UsersTableSeeder seeder ด้วยตนเองผ่านช่างฝีมือเช่นเดียวกับที่คุณทำกับphp artisan db:seed --class="UsersTableSeeder"
คำสั่งคุณจะข้ามคลาส DatabaseSeeder นี้
ในคลาส DatabaseSeeder นี้คำสั่งEloquent::unguard();
อนุญาตให้มีการกำหนดมวลชั่วคราวบนตารางทั้งหมดซึ่งเป็นสิ่งที่คุณต้องการเมื่อคุณเริ่มต้นฐานข้อมูล เมธอด unguard นี้จะดำเนินการเมื่อคุณรันphp aristan db:seed
คำสั่งเท่านั้นดังนั้นจึงเป็นเพียงชั่วคราวเมื่อเทียบกับการทำให้ฟิลด์เติมลงในโมเดลของคุณ (ตามที่ระบุไว้ในคำตอบที่ยอมรับและคำตอบอื่น ๆ )
สิ่งที่คุณต้องทำคือเพิ่ม$this->call('UsersTableSeeder');
วิธีการรันในคลาส DatabaseSeeder และรันphp aristan db:seed
ใน CLI ของคุณซึ่งโดยค่าเริ่มต้นจะเรียกใช้งาน DatabaseSeeder
โปรดทราบว่าคุณกำลังใช้ผู้ใช้ชื่อคลาสพหูพจน์ในขณะที่ Laraval ใช้รูปแบบเอกพจน์ User หากคุณตัดสินใจที่จะเปลี่ยนคลาสของคุณเป็นรูปแบบเอกพจน์ธรรมดาคุณสามารถยกเลิกการใส่ความคิดเห็น//$this->call('UserTableSeeder');
ที่ได้รับมอบหมายไปแล้ว แต่แสดงความคิดเห็นตามค่าเริ่มต้นในคลาส DatabaseSeeder