Как правильно связывать две модели при тестировании?

Пытаюсь протестировать созданную модель User, которая связана с моделью UserMeta так:
public function meta()
    {
      return $this->hasOne(Usermeta::class, 'user_id');
    }


Создаю два Factory:

UserFactory.php

<?php

namespace Database\Factories;

use App\Models\User;
use App\Models\UserMeta;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
            'meta' => UserMeta::factory()
        ];
    }
}


UserMetaFactory.php

<?php

namespace Database\Factories;

use App\Models\UserMeta;
use App\Models\User;

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserMetaFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = UserMeta::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'occupation' => 'Occupation',
            'description' => 'Description',
            'reputation' => 0,
        ];
    }
}


При выполнении данного кода $user = User::factory()->create(); в тесте получаю ошибку:
SQLSTATE[23502]: Not null violation: 7 ОШИБКА: нулевое значение в столбце "user_id" нарушает ограничение NOT NULL DETAIL: Ошибочная строка содержит (null, Occupation, Description, 0, 2020-10-26 14:55:47, 2020-10-26 14:55:47). (SQL: insert into "users_meta" ("occupation", "description", "reputation", "updated_at", "created_at") values (Occupation, Description, 0, 2020-10-26 14:55:47, 2020-10-26 14:55:47))

Понятно что проблема в том, что я не передаю user_id когда создаю запись UserMeta, но почему возникает такая проблема если в UserFactory я указываю на UserMeta? Видел пример для определения для UserMeta (в моем случае):
/**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'user_id' -> User::factory(),
            'occupation' => 'Occupation',
            'description' => 'Description',
            'reputation' => 0,
        ];
    }

Но при запуске получаю ошибку типа out of memory. Как правильно связываются две модели в Laravel 8?
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@HabrDima20
'user_id'=>\App\User::all()->random()->id,
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы