【问题标题】:How to seed a pivot database table with faker values in extra fields in Laravel?如何在 Laravel 的额外字段中使用伪造值播种数据透视数据库表?
【发布时间】:2019-08-20 05:31:48
【问题描述】:

我想在我的数据库中植入虚假值。我有 4 个数据库表:用户、订单、产品和 Order_Products。最后一个表是订单和产品之间的数据透视表。我在这个数据透视表中添加了两个字段:数量和价格。现在我想用伪造的数据填充所有这些表。如果我留下两个额外的字段,它可以使用下面的代码。如果我在迁移中添加两个额外的字段。我收到一个错误(很明显)。但是我如何填写数据透视表中的额外字段?提前致谢。

它在我的数据透视表中没有额外字段的情况下工作,但我知道我希望额外的字段也填充虚假数据。

工厂订单

$factory->define(App\Order::class, function (Faker $faker) {
    return [
        'orderdate' => now(),
        'amount' => $faker->randomFloat(2,0,6)
    ];
});

工厂产品

$factory->define(App\Product::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'description' => $faker->sentence(),
        'price'=> $faker->randomFloat(2,0,6)
    ];
});

播种机

public function run()
{
   factory(App\User::class, 5)->create()->each(function ($user) {
            $user->orders()
                 ->saveMany(factory(App\Order::class, 2)
                 ->create(['user_id' => $user->id])
                 ->each(function ($order){
                      $order->products()
                      ->saveMany(factory(App\Product::class, 3)
                      ->create());
                      })
                      );
            });
}

迁移数据透视表

public function up()
{
    Schema::create('order_product', function (Blueprint $table) {
        $table->unsignedBigInteger('order_id');      
        $table->unsignedBigInteger('product_id');
        $table->integer('amount');
        $table->float('price',8,2);
    });

    Schema::table('order_product', function($table) {
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');
        $table->primary(['order_id', 'product_id']);
    });
}

【问题讨论】:

    标签: laravel pivot factory seed faker


    【解决方案1】:

    试试这个

     public function run ()
     {
      factory ( App\User::class, 5 )->create ()
         ->each ( function ( $user ) {
            $user->orders ()->saveMany ( factory ( App\Order::class, 2 )->create ( [ 'user_id' => $user->id ] )
                  ->each ( function ( $order ) {
                     $products = factory ( App\Product::class, 3 )->make ();
                     foreach ( $products as $product )
                     {
                        $order->products ()->attach ( $product->id, [ 'amount' => 'xxx', 'price' => 'xxx' ] );
                     }
                  } )
               );
         } );
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2015-05-29
      • 2018-01-18
      • 1970-01-01
      • 2017-09-19
      • 2018-12-31
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多