entityManager = $entityManager; } /** * @throws Error */ public function run(Params $params, IO $io): void { $entityType = $params->getArgument(0); $field = $params->getArgument(1); if (!$entityType || !$field) { throw new Error("Entity type and field should be passed as arguments."); } if (!$this->entityManager->hasRepository($entityType)) { throw new Error("Bad entity type."); } $defs = $this->entityManager->getDefs()->getEntity($entityType); if (!$defs->hasAttribute($field)) { throw new Error("Bad field."); } if ($defs->getAttribute($field)->getType() !== Entity::JSON_ARRAY) { throw new Error("Non-array field."); } if ($defs->getAttribute($field)->isNotStorable()) { throw new Error("Not-storable field."); } if (!$defs->getAttribute($field)->getParam('storeArrayValues')) { throw new Error("Array values disabled for the field.."); } $collection = $this->entityManager ->getRDBRepository($entityType) ->sth() ->find(); /** @var ArrayValueRepository $repository */ $repository = $this->entityManager->getRepository(ArrayValue::ENTITY_TYPE); foreach ($collection as $i => $entity) { if (!$entity instanceof CoreEntity) { throw new Error(); } $repository->storeEntityAttribute($entity, $field); if ($i % 1000 === 0) { $io->write('.'); } } $io->writeLine(''); $io->writeLine('Done.'); } }