0

我有一个看起来像这样的数据库表

|id |col2|col3|col4|
-------------------
| 1 |elm0|....|....|
| 2 |elm1|....|....|
| 3 |elm2|....|....|
|...|....|....|....|
|N+1|elmN|....|....|

我想col2用数组中的数据填充(不是随机方式)。示例数组:

$dataArray = array(elm0, elm1, elm2,...)

我创建了这个工厂:

<?php

use Faker\Generator as Faker;

$factory->define(App\Unit::class, function (Faker $faker) {

    $dataArray = array(elm0, elm1, elm2,...,elmN);

    return [
        'col2' => $dataArray[$index];
        'col3' => $faker->'whatever';
        'col4' => $faker->'whatever';
    ];

});

我怎么能做到这一点?

4

4 回答 4

1

你可以这样构建:

<?php
use Faker\Generator as Faker;

$factory->define(App\Unit::class, function(Faker $faker) {

    $data = array(elm0, elm1, elm2,...,elmN);

    foreach($data as $kye=>$value) {
        $result['id'] = $key;
        $result['col2'] = $value;
        $result['col3'] = $faker->'whatever';
        $result['col4'] = $faker->'whatever';
    }

    return $result;
});

当你需要运行一个数组时,经常foreach()解决你的问题。

希望对您有所帮助。

干杯。

于 2018-04-27T12:41:00.020 回答
1

遇到了类似的问题,决定跳过工厂部分,只使用播种机。我在阅读这篇文章时得到了解决方案:一次播种多行 laravel 5 answer by lukasgeiter。

首先你用:php artisan make:seeder UnitsTableSeeder 制作播种机

然后你的播种机里会有这样的东西:

<?php

use Faker\Generator as Faker;
use Illuminate\Database\Seeder;

class UnitsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      $faker = new Faker;
      $data = ['elm0', 'elm1', 'elm2',...,'elmN'];
      $rows = [];

      foreach ($data as $element) {
        $rows[] = ['col2' => $element, 'col3' => $faker->'whatever', 'col4' => $faker->'whatever'];
      }

      App\Unit::insert($rows);
    }
}

在此之后,您可以像先生一样为您的单位表播种:)

php artisan db:seed --class=UnitsTableSeeder

于 2018-11-15T15:13:04.983 回答
0
<?php

use Faker\Generator as Faker;

$factory->define(App\Unit::class, function(Faker $faker) {

        // Grab a random unit
        $unit = App\Unit::orderByRaw('RAND()')->first();

        // Or create a new unit
        $unit = factory(App\Unit::class)->create();

        return [
            'id' => $unit->id,
            'col2' => $faker->'whatever',
            'col3' => $faker->'whatever',
            'col4' => $faker->'whatever',
        ];
    });

请检查它是否适合您。

于 2018-04-27T11:50:39.823 回答
0

如果您想从数组中获取随机元素并伪造它,那么您可以执行以下操作:

$factory->define(Rule::class, function (Faker $faker) {

    $data = [
        'age' => [
            'borrower_age_min'  => 'min:21',
            'borrower_age_max'  => 'max:75'
        ],
        'affordability' => [
            'annual_income' => 'integer|min:40000',
            'loan_amount'   => 'integer|max:3*',
        ],
        'finance' => [
            'loan_length'   => 'integer|max:12',
            'loan_amount'   => 'integer|max:500000',
        ]
    ];

    return [
        'rule'     => json_encode([
            $faker->randomElement(
                [
                    $data['age']['borrower_age_min'],
                    $data['age']['borrower_age_max'],
                    $data['affordability']['annual_income'],
                    $data['affordability']['loan_amount'],
                    $data['finance']['loan_length'],
                    $data['finance']['loan_amount']
                ]
            )
        ])
    ];
});
于 2020-07-01T17:20:53.913 回答