Ответ
В Symfony-проектах основным инструментом был DoctrineFixturesBundle в комбинации с Faker для генерации правдоподобных данных. Это позволяло быстро наполнять базу для разработки, тестирования и демо-стендов.
Базовый пример фикстуры для сущности Product:
// src/DataFixtures/ProductFixtures.php
namespace AppDataFixtures;
use AppEntityProduct;
use DoctrineBundleFixturesBundleFixture;
use DoctrinePersistenceObjectManager;
use FakerFactory;
class ProductFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$faker = Factory::create('ru_RU');
for ($i = 0; $i < 50; $i++) {
$product = new Product();
$product->setName($faker->words(3, true));
$product->setDescription($faker->paragraph());
$product->setPrice($faker->randomNumber(5, false));
$product->setCreatedAt($faker->dateTimeThisYear);
$manager->persist($product);
// Сохраняем ссылку для использования в других фикстурах
$this->addReference('product_' . $i, $product);
}
$manager->flush();
}
}
Для сложных связей использовали:
- Ссылки (References): Чтобы связать, например, заказ (
Order) с существующим пользователем (User) из другой фикстуры.// В OrderFixtures $user = $this->getReference('user_admin'); $order->setCustomer($user); - Зависимые фикстуры: Группировка и порядок загрузки через
dependenciesв аннотацииORMFixture. - Пургатор (Purger): Для очистки базы с отключением foreign key checks (
--purge-with-truncate) перед загрузкой новых данных.
В некоторых проектах также пробовали AliceBundle для описания фикстур в YAML-файлах, что было удобно для команд, где не все разработчики хотели писать PHP-код для генерации данных.