Пытаюсь протестировать созданную модель 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?