使用模型工厂的种子设定表未保存


Seeding table using model factory not saving

我一直在尝试使用模型工厂在我的网站上设置第一个表的种子。我手动输入的种子可以工作,但我想确保我也可以使用工厂播种,用于未来的测试和所有的爵士乐。手动条目工作得很好,但使用模型工厂进行创建会导致SQL语句只更新时间戳。它插入一个空行(时间戳除外),然后由于其中一列上的唯一约束而失败,因此无法输入另一个空列。我一直不明白为什么它没有生成正确的插入,尽管工厂实际上正在创建一组好的数据。(通过打印阵列进行测试。)欢迎提供有关如何解决此问题的任何帮助。

模型工厂:

$factory->define(App'Models'Site::class, function (Faker'Generator $faker) {
    $site = new App'Models'Site;
    $siteTypes = array_keys($site->siteTypes);
    $return = [
        'site_name' => $faker->word
        , 'site_url' => $faker->url
        , 'site_type' => $faker->randomElement($siteTypes)
        , 'is_active' => round(rand(0,1))
        , 'created_at' => $faker->unixTime
        , 'updated_at' => $faker->unixTime
    ];
    return $return;
});

DatabaseSeeder.php:

use Illuminate'Database'Seeder;
use Illuminate'Database'Eloquent'Model;
use App'Models'Site;
class DatabaseSeeder extends Seeder
{
    public function run() {
        Model::unguard();
        DB::delete('delete from sites');
        DB::statement('alter table sites auto_increment = 1');
        $this->call(SiteTableSeeder::class);
        DB::statement('alter table sites auto_increment = 10000');
        Model::reguard();
    }
}

SiteTableSeeder:

class SiteTableSeeder extends Seeder
{
    public function run()
    {
        <snip out the other manual seeds>
        DB::table('sites')->insert([
            'site_id' => 9999,
            'site_name' => 'Generic Online Site',
            'site_url' => 'http://generic.nextworth.com',
            'site_type' => 'online',
            'is_active' => 1,
        ]);
        factory('App'Models'Site', 5)->create();
    }
}

https://stackoverflow.com/a/33716768/2666477实际上已经有了答案。我使用的是__construct方法,但我没有做属性的事情。我补充了一下,一切都很好。谢天谢地!:)

created_atupdated_at不使用unix时间。使用$faker->dateTime($max = 'now');

Laravel将在修改模型时自动更新这些值,因此可能发生的情况是播种失败,但它已经创建了记录并添加了updated_atcreated_at