Beispiel #1
0
 public function read($model, $name, &$dbValue, $transformatorClass = TransformatorInterface::class)
 {
     $fieldMeta = ManganMeta::create($model)->field($name);
     $relMeta = $fieldMeta->related;
     $relModel = new $relMeta->class();
     $criteria = new Criteria(null, $relModel);
     if (empty($relMeta->join)) {
         throw new InvalidArgumentException(sprintf('Parameter `join` is required for Related annotation, model `%s`, field `%s`', get_class($model), $name));
     }
     foreach ($relMeta->join as $source => $rel) {
         assert($model->{$source} !== null);
         $criteria->addCond($rel, '==', $model->{$source});
     }
     $criteria->setSort(new Sort($relMeta->sort));
     if ($relMeta->single) {
         $model->{$name} = (new Finder($relModel))->find($criteria);
     } else {
         $model->{$name} = (new Finder($relModel))->findAll($criteria);
     }
 }