Используйте Faker в октябре CMS - PullRequest
0 голосов
/ 29 октября 2018

Я создаю сервисный плагин в CMS за октябрь. У меня есть 2 поля повторителей (пакеты, почтальон). Я использую плагин Faker для вставки фиктивных данных в базу данных, но есть ошибка

Указан неверный аргумент для foreach ()

Это мой код для семян

<?php namespace Sepehr\Service\Updates;

use Sepehr\Service\Models\Service;
use Faker;
use October\Rain\Database\Updates\Seeder;

class SeedAllTable extends Seeder
{

    public function run()
    {
        $faker = Faker\Factory::create();
        $service = new Service();

        $service->user_id = 1;
        $service->manager_id = 1;
        $service->sender_postal_code = $faker->postcode();
        $service->sender_address = $faker->address();
        $service->status_id = $faker->numberBetween(1, 6);

        foreach ($service->packages as $package) {
            $package['receiver_postal_code'] = $faker->postcode();
            $package['receiver_address'] = $faker->address();
            $package['weight_id'] = $faker->numberBetween(1, 3);
            $package['post_type_id'] = $faker->numberBetween(1, 3);
            $package['distribution_time_id'] = $faker->numberBetween(1, 3);
            $package['special_services_id'] = $faker->numberBetween(1, 3);
            $package['price'] = 0;
            $package['package_type_id'] = $faker->numberBetween(1, 3);
            $package['insurance_type_id'] = $faker->numberBetween(1, 3);
        }
        $service->save();

1 Ответ

0 голосов
/ 29 октября 2018

Это не проблема мошенника или чего-то еще.

проблема в том, что service является новой записью, и packages будет пустым в первый раз, поэтому модель не знает своего определения / схемы, поэтому вам нужно назначить ее как массив, тогда она будет автоматически преобразована в json

class User extends Model
{
   // make sure your field is jsonable
   protected $jsonable = ['packages'];

Теперь для пакетов Заменить

$service->status_id = $faker->numberBetween(1, 6);

foreach ($service->packages as $package) {
    $package['receiver_postal_code'] = $faker->postcode();
    $package['receiver_address'] = $faker->address();
    $package['weight_id'] = $faker->numberBetween(1, 3);
    $package['post_type_id'] = $faker->numberBetween(1, 3);
    $package['distribution_time_id'] = $faker->numberBetween(1, 3);
    $package['special_services_id'] = $faker->numberBetween(1, 3);
    $package['price'] = 0;
    $package['package_type_id'] = $faker->numberBetween(1, 3);
    $package['insurance_type_id'] = $faker->numberBetween(1, 3);
}
$service->save();

С

// ...

$service->status_id = $faker->numberBetween(1, 6);

$packages = [];
$howManyPackges = 3;
while($howManyPackges > 0)
    $package = [];
    $package['receiver_postal_code'] = $faker->postcode();
    $package['receiver_address'] = $faker->address();
    $package['weight_id'] = $faker->numberBetween(1, 3);
    $package['post_type_id'] = $faker->numberBetween(1, 3);
    $package['distribution_time_id'] = $faker->numberBetween(1, 3);
    $package['special_services_id'] = $faker->numberBetween(1, 3);
    $package['price'] = 0;
    $package['package_type_id'] = $faker->numberBetween(1, 3);
    $package['insurance_type_id'] = $faker->numberBetween(1, 3);
    $packages[] = $package;
    $howManyPackges--;
}
$service->packages = $packages;

$service->save();

// ...

Будет добавлено 3 записи для повторителя packages

должен добавить массив пакетов и jsonable преобразует его в json.

если есть сомнения, прокомментируйте.

...