em->getRepository(Doctor::class)->createQueryBuilder('d') ->where('d.sourceRef IS NOT NULL') ->andWhere('d.sourceProfileId IS NULL'); if (!$options->allSources) { $qb->andWhere('d.source = :src')->setParameter('src', 'irimc'); } /** @var Doctor[] $doctors */ $doctors = $qb->getQuery()->getResult(); $changed = 0; $skipped = 0; foreach ($doctors as $doctor) { $id = SourceProfileId::fromRef($doctor->getSourceRef()); if ($id === null) { // source_ref قالب شناسه‌دار ندارد — روی همان کد fallback می‌شود، تغییری نده. $skipped++; continue; } $io->text(sprintf(' #%d %s → %s', $doctor->getId(), $doctor->getName(), $id)); if (!$options->dryRun) { $doctor->setSourceProfileId($id); } $changed++; } return new RepairResult( scanned: count($doctors), changed: $changed, skipped: $skipped, note: $skipped > 0 ? "$skipped رکورد بدون شناسهٔ قابل استخراج" : null, ); } }