Example #1
0
 public static function defineClass($className, $extends = '')
 {
     //        $namespace = 'Eddmash\PowerOrm\Migration\Model';
     $namespace = '';
     $use = '';
     $extendedClass = '';
     if (empty($extends) || Model::isModelBase($extends)) {
         $extends = Model::getFullClassName();
     } else {
         $extendedClass = sprintf('%s%s', ClassHelper::getFormatNamespace($namespace, true), $extends);
         $use = sprintf('use %s;', $extendedClass);
         $extends = trim(substr($extends, strripos($extends, '\\')), '\\');
     }
     if (!StringHelper::isEmpty($extendedClass) && !ClassHelper::classExists($extendedClass, $namespace)) {
         self::$deferedClasses[$extends][] = ['class' => $className, 'extends' => $extends];
         return false;
     }
     $extends = ClassHelper::getNameFromNs($extends, $namespace);
     $class = sprintf(self::getTemplate(), $namespace, $use, $className, $extends);
     $className = sprintf('%s%s', ClassHelper::getFormatNamespace($namespace, true), $className);
     if (ArrayHelper::hasKey(self::$deferedClasses, $className)) {
         foreach (self::$deferedClasses[$className] as $deferedClass) {
             self::defineClass($deferedClass['class'], $deferedClass['extends']);
         }
     }
     if (!ClassHelper::classExists($className, $namespace)) {
         eval($class);
     }
     return $className;
 }
Example #2
0
 /**
  * @ignore
  *
  * @return string
  */
 public function __toString()
 {
     return $this->scopeModel->getFullClassName() . '->' . $this->name;
 }
Example #3
0
 /**
  * Add the current object to the passed in object.
  *
  * @param string $propertyName the name map the current object to, in the class object passed in
  * @param Model  $classObject  the object to attach the current object to
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 public function contributeToClass($propertyName, $classObject)
 {
     $classObject->{$propertyName} = $this;
     $this->modelName = $this->getName($classObject->getFullClassName());
     $this->scopeModel = $classObject;
     // override with the configs now.
     foreach (static::$DEFAULT_NAMES as $defaultName) {
         if (ArrayHelper::hasKey($this->overrides, $defaultName)) {
             $this->{$defaultName} = $this->overrides[$defaultName];
         }
     }
     if ($this->dbTable == null) {
         $this->dbTable = $this->_getTableName();
     }
     $vName = $this->verboseName;
     $this->verboseName = empty($vName) ? ucwords(StringHelper::camelToSpace($this->modelName)) : $vName;
 }
Example #4
0
 /**
  * Creates an intermediary model.
  *
  * @param ManyToManyField $field
  * @param Model           $model
  *
  * @return Model
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 public function createManyToManyIntermediaryModel($field, $model)
 {
     $modelName = $model->meta->modelName;
     if (is_string($field->relation->toModel)) {
         $toModelName = Tools::resolveRelation($model, $field->relation->toModel);
     } else {
         $toModelName = $field->relation->toModel->meta->modelName;
     }
     $className = sprintf('%1$s_%2$s', $modelName, $field->name);
     $intermediaryClass = 'class %1$s extends %2$s{
         public function fields(){}
     }';
     $intermediaryClass = sprintf($intermediaryClass, $className, Model::getFullClassName());
     if (!class_exists($className, false)) {
         eval($intermediaryClass);
     }
     $from = strtolower($modelName);
     $to = strtolower($toModelName);
     if ($from == $to) {
         $to = sprintf('to_%s', $to);
         $from = sprintf('from_%s', $from);
     }
     $fields = [$from => ForeignKey::createObject(['to' => $modelName, 'dbConstraint' => $field->relation->dbConstraint, 'onDelete' => Delete::CASCADE]), $to => ForeignKey::createObject(['to' => $toModelName, 'dbConstraint' => $field->relation->dbConstraint, 'onDelete' => Delete::CASCADE])];
     $meta = ['dbTable' => $field->_getM2MDbTable($model->meta), 'verboseName' => sprintf('%s-%s relationship', $from, $to), 'uniqueTogether' => [$from, $to], 'autoCreated' => true];
     $className = '\\' . $className;
     /** @var $intermediaryObj Model */
     $intermediaryObj = new $className();
     $intermediaryObj->init($fields, ['meta' => $meta, 'registry' => $field->scopeModel->meta->registry]);
     return $intermediaryObj;
 }