В Symfony4.2 у меня есть Translate сущность (id, gb_name, fr_name) и LocationCountry сущность (id, ISO3166-2 name: GB, FR, DE…,translate_id)
Я определяю файл CSV с 255 странами ("ГБ", "Великобритания", "Англетер" ...) и хочу поместить его в таблицы сущностей Translate и LocationCountry с помощью DataFixture.
Я внимательно прочитал https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures
и
php создать приборы с автоматическими связями
src / DataFixtures / TranslateFixtures.php:
if ($csv_handle) {
while ($item = fgetcsv($csv_handle, $csv_max_line_length, $csv_delimiter, $csv_enclosure)) {
$obj = new Translate();
$obj->setGbValue($item[1]);
$obj->setFrValue($item[2]);
$this->addReference('country'.$item[0], $obj);
$manager->persist($obj);
}
fclose($csv_handle);
}
$manager->flush();
Я не уверен, что addReference должно быть до flush () ?
src / DataFixtures / LocationCountryFixtures.php:
if ($csv_handle) {
while ($item = fgetcsv($csv_handle, $csv_max_line_length, $csv_delimiter, $csv_enclosure)) {
$translate_country = $this->getReference('country'.$item[0]);
$obj = new LocationCountry();
$obj->setIso3166Name($item[0]);
$obj->setTranslate($translate_country);
$manager->persist($obj);
}
fclose($csv_handle);
}
$manager->flush();
}
public function getDependencies() {
return array(
Translate::class,
);
}
Если я удалю addReference Перевести сущность хорошо заполнена.
Но с кодом, приведенным выше, он возвращает ошибку:
In SymfonyFixturesLoader.php line 76:
The "App\Entity\Translate" fixture class is trying to be loaded, but is not available. Make sure this class is defined as a service and tagged with "doctrine.fixture.orm".
Я думаю, что имеет право Использовать:
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use App\Entity\LocationCountry;
use App\Entity\Translate;
Спасибо за помощь