public static function ensureClass($model, $name, &$dbValue) { if (!is_array($dbValue) || !array_key_exists('_class', $dbValue) || empty($dbValue['_class'])) { $class = static::getClassName($model, $name); } else { $class = $dbValue['_class']; } if (!ClassChecker::exists($class)) { $event = new ClassNotFound($model); $event->notFound = $class; if (Event::hasHandler($model, NotFoundResolver::EventClassNotFound) && Event::handled($model, NotFoundResolver::EventClassNotFound, $event)) { $class = $event->replacement; } else { throw new ManganException(sprintf("Embedded model class `%s` not found in model `%s` field `%s`", $class, get_class($model), $name)); } } $dbValue['_class'] = $class; }
protected function fetchData() { $criteria = $this->configureFetch(); /** * TODO Refactor this into SearchFinder class */ $qb = new QueryBuilder(); if ($criteria instanceof SearchCriteria) { $models = $criteria->getModels(); if (!empty($models)) { $qb->add($models); } } $model = $this->getModel(); if (!Event::handled($model, FinderInterface::EventBeforeFind)) { return []; } $modelCriteria = $model->getDbCriteria(); $criteria->mergeWith($modelCriteria); if (!empty($model)) { $qb->add($model); } $qb->setCriteria($criteria); $rawResults = $qb->search($criteria->getSearch()); $results = []; foreach ($rawResults as $data) { $model = SearchArray::toModel($data['_source']); if ($model instanceof IndexAwareInterface) { $model->setIndex($data['_index']); } if ($model instanceof ScoreAwareInterface) { $model->setScore($data['_score']); } $results[] = $model; } return $results; }
/** * Trigger before exists event * @return boolean */ private function _beforeExists() { if (!Event::hasHandler($this->model, FinderInterface::EventBeforeExists)) { return true; } return Event::handled($this->model, FinderInterface::EventBeforeExists); }