Метод raw
Метод raw класса Factory позволяет получить массив
сырых атрибутов, сгенерированных фабрикой, без создания записи
в базе данных. Он полезен для тестирования, когда нужно получить
данные для заполнения форм или проверки валидации,
не затрагивая базу данных.
Метод принимает необязательные параметры: массив переопределяемых атрибутов и количество записей. Возвращает массив или коллекцию массивов с данными модели.
Синтаксис
<?php
Model::factory()->raw($attributes = [], $count = null);
?>
Пример
Давайте получим массив атрибутов для модели User:
<?php
use AppModelsUser;
$res = User::factory()->raw();
print_r($res);
?>
Результат выполнения кода:
[
"name" => "John Doe",
"email" => "john@example.com",
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
]
Пример
Давайте переопределим некоторые атрибуты:
<?php
use AppModelsUser;
$res = User::factory()->raw([
'name' => 'Jane Doe',
'email' => 'jane@example.com'
]);
print_r($res);
?>
Результат выполнения кода:
[
"name" => "Jane Doe",
"email" => "jane@example.com",
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
]
Пример
Создадим несколько массивов данных с помощью параметра count:
<?php
use AppModelsUser;
$res = User::factory()->raw([], 3);
print_r($res);
?>
Результат выполнения кода:
[
0 => [
"name" => "John Doe",
"email" => "john1@example.com",
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
],
1 => [
"name" => "Jane Smith",
"email" => "jane1@example.com",
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
],
2 => [
"name" => "Bob Johnson",
"email" => "bob1@example.com",
"password" => "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi"
]
]
Пример
Давайте используем raw для проверки валидации формы:
<?php
namespace TestsUnit;
use TestsTestCase;
use AppModelsUser;
use IlluminateFoundationTestingRefreshDatabase;
class UserValidationTest extends TestCase
{
use RefreshDatabase;
public function test_user_validation_passes()
{
$data = User::factory()->raw([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'password123'
]);
$validator = validator($data, [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8'
]);
$this->assertTrue($validator->passes());
}
public function test_user_validation_fails()
{
$data = User::factory()->raw([
'email' => 'invalid-email',
'password' => 'short'
]);
$validator = validator($data, [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8'
]);
$this->assertTrue($validator->fails());
}
}
?>