Laravel Factory Logic - PullRequest
       6

Laravel Factory Logic

2 голосов
/ 22 сентября 2019

У меня есть фабрика ниже.Когда я настраиваю его на создание более одной модели, идентификатор, похоже, не увеличивается.Пожалуйста, помогите мне понять, как я могу заставить этот код работать так, чтобы идентификатор каждый раз увеличивался.

<?php

/* @var $factory \Illuminate\Database\Eloquent\Factory */

use App\PurchaseOrder;
use Faker\Generator as Faker;
use Illuminate\Support\Facades\DB;

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

    DB::select(DB::raw('SET FOREIGN_KEY_CHECKS=0'));
    $numberOfLines = rand(1, 5);
    $id = PurchaseOrder::all()->last()->id + 1?? 1;

    for ($i = 0; $i < $numberOfLines; $i++) {
        $line = factory(App\Line::class)->make([
            'purchase_order_id' => $id,
        ]);
        $line->save();
    };

    $lines = App\Line::where('purchase_order_id', $id)->get();
    DB::select(DB::raw('SET FOREIGN_KEY_CHECKS=1'));
    return [
        'total_price_ex_vat' => $lines->sum('price_ex_vat'),
        'total_price_inc_vat' => $lines->sum('price_inc_vat'),
        'revised_total_price_ex_vat' => $lines->sum('revised_price_ex_vat'),
        'revised_total_price_inc_vat' => $lines->sum('revised_price_inc_vat'),
        'deliver_to' => $faker->words(2, true),
        'requested_staff_id' => factory(App\Staff::class)->create()->id ,
        'auth_staff_id' => Null,
        'supplier_id' => factory(App\Supplier::class)->create()->id,
        'rejection_code_id' => Null,
        'status_id' => 1,
        'status_changed_date' => date('Y-m-d'),
        'user_id' => factory(App\User::class)->create()->id,
    ];

});

1 Ответ

1 голос
/ 24 сентября 2019

У вас есть таблица PurchaseOrder, зависящая от Lines, и Lines, зависящая от PurchaseOrder.Я полагаю, что вам следует пересмотреть свой дизайн БД, поскольку это кажется довольно странным.

Почему бы вам не избежать использования Lines в PurchaseOrder и загрузить его в качестве атрибута в модели PurchaseOrder с помощью средства доступа?

Для получения дополнительной информации: https://laravel.com/docs/5.8/eloquent-mutators#defining-an-accessor

...