Приспособление Алисы: Ссылка на сущность уже сохранена & amp; промывать

Я упростил мою проблему с примером теоретического Article юридическое лицо.
Моя статья имеет название, категорию контента и тип

Мои приборы пишутся в отдельных файлах YAML

# category.yml
AppBundle\Entity\Category:
category_1:
id: 1
name: foo
category_2:
id: 2
name: bar# type.yml
AppBundle\Entity\Type:
type_1:
id: 1
name: baz
type_2:
id: 2
name: qux

# article.yml
AppBundle\Entity\Article:
article_1:
id: 1
title: "Lorem ipsum dolor sit amet, consectetur"content: "Lorem ipsum dolor sit amet, consectetur"category: '@category_1'

Проблема в том, что у меня есть DoctrineListener на Events::preUpdate какое обновление Article :: type зависит от Article :: Category

/**
* Doctrine Listener
*/
class ArticleListener
{
// ...
private function preUpdate(LifecycleEventArgs $args)
{
$article = $args->getEntity();

// Get type from DB
$type = $em->getRepository('AppBundle:Type')->find(1)

$article->setType($type);
}
}

Итак, категория нагрузки & типа светильники сначала

class BasicFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$files = [
'category' => __DIR__.'/../../../AppBundle/DataFixtures/category.yml',
'type'     => __DIR__.'/../../../AppBundle/DataFixtures/type.yml',
//... other yml files
];

$loader    = new NativeLoader();
$objectSet = $loader->loadFiles($files);

foreach ($objectSet->getObjects() as $key => $object) {
$this->addReference($key, $object);
$manager->persist($object);
}

$manager->flush();
}
}

И тогда я загружаю свой светильник Article DependentFixtureInterface::getDependencies чтобы убедиться, что категории и типы уже загружены

class ArticleFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{
// This give me my object
dump($this->getReference('category_1'));$files = [
'article' => __DIR__.'/../../../AppBundle/DataFixtures/article.yml',
//... other yml files
];

$loader    = new NativeLoader();
$objectSet = $loader->loadFiles($files);

foreach ($objectSet->getObjects() as $key => $object) {
$manager->persist($object);
}

$manager->flush();
}

public function getDependencies()
{
return [
BasicFixtures::class,
];
}
}

Но это кажется, что ссылка «@ category_1» потеряна

In FixtureNotFoundExceptionFactory.php line 23:

[Nelmio\Alice\Throwable\Exception\Generator\Resolver\FixtureNotFoundException]
Could not find the fixture "category_1".

Что я сделал не так?
Большое спасибо за помощь

0

Решение

Вы должны назвать свою ссылку в BasicFixture.

// other fixtures can get this object using the 'admin-user' name
$this->addReference('category_1', $userAdmin);

И затем получите эту ссылку в ArticleFixture с указанным именем.

$object->addCategory($this->getReference('category_1'));
$manager->persist($object);

Для справки:

Совместное использование объектов между приборами:

https://symfony.com/doc/master/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures

Загрузка файлов фикстур по порядку:

https://symfony.com/doc/master/bundles/DoctrineFixturesBundle/index.html#loading-the-fixture-files-in-order

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]