Laravel заполняет столбец таблицы базы данных из массива с использованием фабрики

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

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

});

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


person Yamona    schedule 27.04.2018    source источник
comment
Я ответил. Пожалуйста, проверьте и дайте мне знать, если это работает для вас.   -  person Jinandra Gupta    schedule 27.04.2018


Ответы (4)


можно построить так:

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

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

Ваше здоровье.

person vicentimartins    schedule 27.04.2018
comment
Это добавит/вернет последний элемент в массиве elmN. Ваше здоровье - person Yamona; 27.04.2018
comment
Неправда. Это вернет массив со всеми взаимодействиями в операторе foreach, который сохранит все данные внутри него. - person vicentimartins; 29.04.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',
        ];
    });

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

person Jinandra Gupta    schedule 27.04.2018

Если вы хотите получить случайный элемент из массива и подделать его, вы можете сделать что-то, как показано ниже:

$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']
                ]
            )
        ])
    ];
});
person Invincible    schedule 01.07.2020