laravel 一对多数据填充
2018年9月5日- 数据模型 User.php
- 用户的数据工厂 database/factories/UserFactory.php
- 用户的数据填充 database/seeds/UsersTableSeeder.php
- 注册数据填充 database/seeds/DatabaseSeeder.php
1.修改数据填充类的名字,composer重新载入
1 2 3 |
$ mv database/factories/ModelsProductFactory.php database/factories/ProductFactory.php $ mv database/factories/ModelsProductSkuFactory.php database/factories/ProductSkuFactory.php $ composer dumpautoload |
2.编写工厂类
打开文件database\factories\ProductFactory.php
开始编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php use Faker\Generator as Faker; $factory->define(App\Models\Product::class, function (Faker $faker) { $image = $faker->randomElement([ "https://lccdn.phphub.org/uploads/images/201806/01/5320/7kG1HekGK6.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/1B3n0ATKrn.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/r3BNRe4zXG.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/C0bVuKB2nt.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/82Wf2sg8gM.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/nIvBAQO5Pj.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/XrtIwzrxj7.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/uYEHCJ1oRp.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/2JMRaFwRpo.jpg", "https://lccdn.phphub.org/uploads/images/201806/01/5320/pa7DrV43Mw.jpg", ]); return [ 'title' => $faker->word, 'description' => $faker->sentence, 'image' => $image, 'on_sale' => true, 'rating' => $faker->numberBetween(0, 5), 'sold_count' => 0, 'review_count' => 0, 'price' => 0, ]; }); |
打开文件database\factories\ProductSkuFactory.php
开始编辑
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php use Faker\Generator as Faker; $factory->define(App\Models\ProductSku::class, function (Faker $faker) { return [ 'title' => $faker->word, 'description' => $faker->sentence, 'price' => $faker->randomNumber(4), 'stock' => $faker->randomNumber(5), ]; }); |
3创建播种机Seeder
让这两种数据有关联的填充
执行命令
1 |
$ php artisan make:seeder ProductsSeeder |
开始编辑播种机database\seeds\ProductsSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php use Illuminate\Database\Seeder; class ProductsSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // 创建 30 个商品 $products = factory(\App\Models\Product::class, 30)->create(); foreach ($products as $product) { // 创建 3 个 SKU,并且每个 SKU 的 `product_id` 字段都设为当前循环的商品 id $skus = factory(\App\Models\ProductSku::class, 3)->create(['product_id' => $product->id]); // 找出价格最低的 SKU 价格,把商品价格设置为该价格 $product->update(['price' => $skus->min('price')]); } } } |
4.使用播种机
执行命令
1 |
$ php artisan db:seed --class=ProductsSeeder |