Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 /**
  * 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);
 }