Laravel заполнить столбец таблицы базы данных из массива, используя фабрику - PullRequest
0 голосов
/ 27 апреля 2018

У меня таблица базы данных выглядит так

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

});

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

вы можете построить так:

<?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() решает вашу проблему.

Надеюсь, это поможет вам.

Приветствие.

0 голосов
/ 15 ноября 2018

Возникла аналогичная проблема и решил пропустить заводскую деталь и использовать только сеялку. Я получил решение, читая это: Одновременный посев нескольких строк 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

0 голосов
/ 27 апреля 2018
<?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',
        ];
    });

Пожалуйста, проверьте, работает ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...