Laravel 中的数据库未使用适当的工厂和播种器 class 进行播种

Database not seeding with proper factories and seeder class in Laravel

问题是我的数据库没有在我的 laravel 项目中使用 php artisan db:seed 播种。没有错误显示,在命令后我的数据库只是空的,但 php artisan db:seed 显示成功结果。

这是我 laravel 项目 database/seeders 文件夹下 DatabaseSeeder.php 文件中的 运行 方法。

$this->call([
    ItemBrandSeeder::class,
    ItemDepartmentSeeder::class,
    ItemUnitSeeder::class,
    CategorySeeder::class,
    ItemSeeder::class
]);

这是我 laravel 项目 database/seeders 文件夹下 ItemBrandSeeder.php 中的 运行 方法。

ItemBrandFactory::times(100);

这是我在 laravel 项目的 database/factories 文件夹下的 ItemBrandFactory.php 中的定义方法。

return [
    'stvalue1' => $this->faker->randomElement(['BOX', 'PCS', 'NOS', 'PACK']),       
    'stdescription' => $this->faker->text('30'),
    'stvalue2' => $this->faker->randomElement(['Countable', 'Measurable']),
    'stflag' => "UNIT"
];

这是我 laravel 项目中 database/seeders 文件夹下 ItemDepartmentSeeder.php 中的 运行 方法。

ItemDepartmentFactory::times(25);

这是我在 laravel 项目的 database/factories 文件夹下的 ItemDepartmentFactory.php 中的定义方法。

return [
    'stCategory' => $this->faker->text(25),
    'sttype' => ['department']
];

这是我 laravel 项目 database/seeders 文件夹下 ItemUnitSeeder.php 中的 运行 方法。

DB::connection("dynamic_db")->table('tblgeneral')->insert([
    [
        'stflag' => 'UNIT',
        'stdescription' => "Pieces",
        'stvalue1' => "PCS",
        'stvalue2' => "Countable"
    ],

    [
        'stflag' => 'UNIT',
        'stdescription' => "Box",
        'stvalue1' => "BOX",
        'stvalue2' => "Countable"
    ],

    [
        'stflag' => 'UNIT',
        'stdescription' => "Bar",
        'stvalue1' => "BAR",
        'stvalue2' => "Measurable"
    ],

    [
        'stflag' => 'UNIT',
        'stdescription' => "Nos",
        'stvalue1' => "NOS",
        'stvalue2' => "Measurable"
    ],

    [
        'stflag' => 'UNIT',
        'stdescription' => "Feet",
        'stvalue1' => "FT",
        'stvalue2' => "Measurable"
    ],
]);

ItemUnitSeeder 没有工厂 class 这是我 laravel 项目 database/seeders 文件夹下 CategorySeeder.php 中的 运行 方法。

CategoryFactory::times(50);

这是我在 laravel 项目的 database/factories 文件夹下的 CategoryFactory.php 中的定义方法。

return [
    'stCategory' => $this->faker->text(25),
    'sttype' => ['category']
];

这是我 laravel 项目 database/seeders 文件夹下 ItemSeeder.php 中的 运行 方法。

ItemFactory::times(1000);

这是我在 laravel 项目的 database/factories 文件夹下的 ItemFactory.php 中的定义方法。

$edate = array(\Carbon\Carbon::create('1973-09-17 04:30:43'), \Carbon\Carbon::now())[rand(0, 1)];
$unit2 = array('na', 1, 2, 3, 4, 5)[rand(0, 5)];
$purchasePrice = $this->faker->numberBetween(200, 10000);
$retailPrice = $purchasePrice + ($this->faker->numberBetween(5, 40) / 100 * $purchasePrice);
$minPrice = $retailPrice + $this->faker->numberBetween(0, 50);
$supplierGivenDiscount = $this->faker->numberBetween(0, 10);
$retailDiscount = $this->faker->numberBetween(0, 5);
$unit2Def = $this->faker->numberBetween(2, 12);
$unit2Price = ($retailPrice / $unit2Def) / 100 * rand(1, 50);
$wholesalePrice = $retailPrice - $this->faker->numberBetween(0, 5) / 100 * $retailPrice;
$wholesaleDiscount = $wholesalePrice - $this->faker->numberBetween(0, 3) / 100 * $wholesalePrice;

return [
    'stItemCode' => getSerialNo('item'),
    'stDescription' => $this->faker->text(100),
    'stCategory' => rand(0, 50),
    'stUnit1' => rand(0, 5),
    'stBrand' => rand(0, 100),
    'stDepartment' => rand(0, 25),
    'stDescription2' => $this->faker->text(200),
    'daEdate' => $edate,
    'tiContaminable' => $edate->eq(\Carbon\Carbon::create('1973-09-17 04:30:43')),
    'dbMinPrice' => $minPrice,
    'dbPurchasePrice' => $purchasePrice,
    'dbSupplierGivenDiscount' => $supplierGivenDiscount,
    'dbRetailPrice' => $retailPrice,
    'dbRetailPriceDiscount' => $retailDiscount,
    'stShelf' => rand(0, 30),
    'siItemType' => rand(0, 3),
    'stUnit2' => $unit2,
    'dbUnit2Price' => $unit2 != 'na' ? $unit2Price : 0,
    'dbUnit2Def' => $unit2 != 'na' ? $unit2Def : 0,
    'dbWholeSalesPrice' => $wholesalePrice,
    'dbWholeSalesPriceDiscount' => $wholesaleDiscount,
    'dbReorderLevel' => 0,
    'stBranch' => Branch::all()->toArray()[rand(0, Branch::count())]['id'],
    'stWebUpdateStatus' => 1,
];

控制台中的命令和输出

但是在我的数据库中没有播种数据我的数据库是空的。

如果你想知道为什么我使用 DB class 在 ItemUnitSeeder.php 文件中创建 ItemUnits 因为我只想要 5 个单位所以我想为那个没用的工厂。

类别工厂、项目品牌工厂和项目部门工厂使用相同的table名称称为“tblCategory”,唯一不同的是“sttype”字段。如果“sttype”设置为“category”而不是它的类别,如果它设置为“brand”而不是它的品牌等等。

你的代码是正确的,没有问题,但我认为你的问题出在这里: 而不是使用 times() 使用这样的因素: Item::factory()->count(1000)->create();