【问题标题】:Laravel fill database table column from array using factoryLaravel 使用工厂从数组中填充数据库表列
【发布时间】:2018-10-08 05:35:00
【问题描述】:

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

|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';
    ];

});

我该怎么做?

【问题讨论】:

  • 我已经回答了。请检查并告诉我它是否适合您。

标签: php laravel factory faker


【解决方案1】:
<?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',
        ];
    });

请检查它是否适合您。

【讨论】:

    【解决方案2】:

    你可以这样构建:

    <?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()解决你的问题。

    希望对你有所帮助。

    干杯。

    【讨论】:

    • 这将添加/返回数组 elmN 中的最后一个元素。干杯
    • 不是真的。这将返回一个数组,其中包含 foreach 语句中的所有交互,该数组将保存其中的所有数据。
    【解决方案3】:

    遇到了类似的问题,决定跳过工厂部分,只使用播种机。我在阅读本文时找到了解决方案:Seed multiple rows at once laravel 5 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

    【讨论】:

      【解决方案4】:

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

      $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']
                      ]
                  )
              ])
          ];
      });
      

      【讨论】:

        猜你喜欢
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 2019-04-04
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多