/** * @param OrdersImportItem $import_item * * @param array $name * @return Entity\Employe[] */ private function findRegistrants(OrdersImportItem $import_item, &$name = null) { /** @var ORM\EntityRepository */ $rep = $this->_em->getRepository('TaxiPrizeTaxiBundle:Employe'); // TODO: Костыль, удаляющий небуквенные знаки. Перенести в валидацию или фильтр? $name = preg_replace('#[^\\p{L}\\s-]#u', '', $import_item->registrant); $name = array_map('trim', explode(' ', $name)); if (count($name) > 1) { // Secondname Firstname // TODO: Костыль, исправляющий проблему с полем, в котором больше двух слов. Перенести в валидацию? $filter = array('secondName' => $name[0], 'firstName' => $name[1]); $res = $rep->findBy($filter); // return $rep->findBy(array_combine(array('secondName', 'firstName'), $name)); } else { // Secondname $res = $rep->findBy(array('secondName' => $name[0])); } if (empty($res)) { $res = $rep->findBy(array('importNameCompressed' => Entity\Employe::compressImportName($import_item->registrant))); } return $res; }
/** * @param Employes2ImportItem $import_item * * @return Entity\Employe[] */ protected function findEmployes(EmployesImportItem $import_item) { /** @var ORM\EntityRepository */ $rep = $this->_em->getRepository('TaxiPrizeTaxiBundle:Employe'); $qb = $rep->createQueryBuilder('e'); $qb->where('e.externalId = :external_id')->setParameter('external_id', $import_item->external_id); if ($this->getOption(self::OPTION_MERGE_IF_SAME_NAME)) { list($second, $first) = $this->parseName($import_item); if (isset($second, $first)) { $qb->orWhere($qb->expr()->andX('e.secondName = :second', 'e.firstName = :first'))->setParameter('second', $second)->setParameter('first', $first); } $qb->orWhere('e.importNameCompressed = :name')->setParameter('name', Entity\Employe::compressImportName($import_item->name)); } return $qb->getQuery()->getResult(); }