Pull to refresh
0
0
Андрей@Tr0t

User

Send message
Во-первых:

$factory->define(Order::class, function (Faker $faker, $passedArguments = []) {
    return [
        'user_id' => function () use ($passedArguments) {
            // Если не передали user_id, то создаём своего
            if (! array_key_exists('user_id', $passedArguments)) {
                return factory(User::class)->create()->id;
            }
        }
    ];
});

Даст идентичный результат

Во-вторых, что важнее:
Данной проблемы, которую вы описываете, не существует
Вот вам пример из реального проекта, тест написал специально для вас

<?php

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

use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(\Constructor\Auth\Models\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => bcrypt('secret'),
        'remember_token' => Str::random(10),
        'guid' => $faker->unique()->uuid,
    ];
});

<?php

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

use Constructor\Auth\Models\User;
use Constructor\Calculations\Models\Calculation;
use Faker\Generator as Faker;

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

    $guid = $faker->unique()->uuid;

    return [
        'guid' => $guid,
        'name' => $faker->incrementalName('Демо рассчёт'),
        'user_guid' => function () {
            return factory(User::class)->create()->guid;
        },
        'is_actual' => true,
        'amount' => 0,
        'original_guid' => $guid,
        'previous_guid' => null,
        'next_guid' => null,
        'is_visible' => true,
        'is_changed' => false,
    ];
});


namespace Tests\Unit;

use Constructor\Auth\Models\User;
use Constructor\Calculations\Models\Calculation;
use Tests\TestCase;

class FactoryTest extends TestCase
{
    public function testCreateAddOneUser()
    {
        // Given user
        $user = factory(User::class)->create();
        // When we use Order factory and provide user_id parameter
        $calculation = factory(Calculation::class)->create(['user_guid' => $user->guid]);
        // Then we should have new Order::class instance with provided user_id
        $this->assertEquals($user->guid, $calculation->user_guid);
        // Let's check that system has one user in DB
        $this->assertEquals(1, User::count());
    }
}


$ phpunit -- tests/Unit/FactoryTest.php
> OK (1 test, 2 assertions)

Спасибо за статью, а когда можно будет пощупать новую версию?

Всё очень просто, идиот тут гопник, он и должен понести ответственность, починить машину и сесть в тюрьму за убийство гуманиста
В аду отдельный котел для тех, кто упоминает анекдоты, но не рассказывает, о чем они. ©bash.org.ru
Отдельно взятые данные с вышек бесполезны, а вот совместив их с другими данными что есть (теоретически) у фейсбука можно получить очень много интересной информации.
для этого нужно сначала разблокировать

Information

Rating
Does not participate
Location
Ульяновск, Ульяновская обл., Россия
Date of birth
Registered
Activity