Inheritance: extends DeclareSchema
Example #1
0
 /**
  * For schema class, get its reference schema classes recursively.
  *
  * @param boolean $recursive
  */
 public function getReferenceSchemas($recursive = true)
 {
     $schemas = array();
     foreach ($this->relations as $rel) {
         if (!isset($rel['foreign_schema'])) {
             continue;
         }
         $class = ltrim($rel['foreign_schema'], '\\');
         if (isset($schemas[$class])) {
             continue;
         }
         if (!class_exists($class, true)) {
             throw new RuntimeException("Foreign schema class {$class} not found.");
         }
         if (is_a($class, 'LazyRecord\\BaseModel', true)) {
             // bless model class to schema object.
             if (!method_exists($class, 'schema')) {
                 throw new Exception(get_class($this) . ": You need to define schema method in {$class} class.");
             }
             $schemas[$class] = 1;
             $model = new $class();
             $schema = new DynamicSchemaDeclare($model);
             if ($recursive) {
                 $schemas = array_merge($schemas, $schema->getReferenceSchemas(false));
             }
         } elseif (is_subclass_of($class, 'LazyRecord\\Schema\\DeclareSchema', true)) {
             $schemas[$class] = 1;
             $fs = new $class();
             if ($recursive) {
                 $schemas = array_merge($schemas, $fs->getReferenceSchemas(false));
             }
         } else {
             throw new InvalidArgumentException("Foreign schema class {$class} is not a SchemaDeclare class");
         }
     }
     return $schemas;
 }