在laravel播种时的质量分配错误

jos*_*y10 5 php laravel laravel-4

我正在使用faker类来帮助播种我的数据库.DatabaseSeeder看起来像这样

<?php

class DatabaseSeeder extends Seeder
{
public function run()
{
    Eloquent::unguard();

    $tables = [
        'users',
        'posts',
    ];

    foreach ($tables as $table) {
        DB::table($table)->truncate();
    }

    $this->call('UsersTableSeeder');
    $this->call('PostsTableSeeder');
   }
}
Run Code Online (Sandbox Code Playgroud)

和UsersTableSeeder

<?php

class UsersTableSeeder extends Seeder {

public function run()
{
    $faker = Faker\Factory::create();

        for( $i=0 ; $i<50 ; $i++ ) {
        $user = User::create([
            'first_name'         => $faker->firstName,
            'surname'            => $faker->lastName,
            'email'              => $faker->email,
            'username'           => $faker->userName,
            'bio'                => $faker->sentences,
            'bio_html'           => $faker->sentences,
            'wesbite'            => $faker->url,
            'twitter'            => $faker->word,
        ]);
    }   
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试播种此表时,我在终端中收到以下错误.

[Illuminate\Database\Eloquent\MassAssignmentException]  
first_name      
Run Code Online (Sandbox Code Playgroud)

如果我尝试种下两种,我就会得到这个

 [ErrorException]                                                                       
 preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
Run Code Online (Sandbox Code Playgroud)

我以为包括Eloquent::unguard();停止了这个错误?我正在运行最新版本的Laravel.

J.T*_*mes 11

faker->sentences()faker->paragraphs()返回数组,您的类希望收到一个字符串.

您既可以使用 faker->text() ,也可以使用

implode(" ",$faker->sentences());
Run Code Online (Sandbox Code Playgroud)


小智 2

您可以在模型中定义受保护字段的空数组;

class User extends Eloquent
{
    protected $guarded = []; 
}
Run Code Online (Sandbox Code Playgroud)