/** * @inheritdoc */ public function process(EloquentModel $model, Config $config) { $className = $config->get('class_name'); $baseClassName = $config->get('base_class_name'); $tableName = $config->get('table_name'); $model->setName(new ClassNameModel($className, $this->helper->getShortClassName($baseClassName))); $model->addUses(new UseClassModel(ltrim($baseClassName, '\\'))); $model->setTableName($tableName ?: $this->helper->getDefaultTableName($className)); if ($model->getTableName() !== $this->helper->getDefaultTableName($className)) { $property = new PropertyModel('table', 'protected', $model->getTableName()); $property->setDocBlock(new DocBlockModel('The table associated with the model.', '', '@var string')); $model->addProperty($property); } }
/** * @param EloquentModel $model * @param Relation $relation * @return string */ protected function createMethodBody(EloquentModel $model, Relation $relation) { $reflectionObject = new \ReflectionObject($relation); $name = Str::camel($reflectionObject->getShortName()); $arguments = [$model->getNamespace()->getNamespace() . '\\' . Str::singular(Str::studly($relation->getTableName()))]; if ($relation instanceof BelongsToMany) { $defaultJoinTableName = $this->helper->getDefaultJoinTableName($model->getTableName(), $relation->getTableName()); $joinTableName = $relation->getJoinTable() === $defaultJoinTableName ? null : $relation->getJoinTable(); $arguments[] = $joinTableName; $arguments[] = $this->resolveArgument($relation->getForeignColumnName(), $this->helper->getDefaultForeignColumnName($model->getTableName())); $arguments[] = $this->resolveArgument($relation->getLocalColumnName(), $this->helper->getDefaultForeignColumnName($relation->getTableName())); } elseif ($relation instanceof HasMany) { $arguments[] = $this->resolveArgument($relation->getForeignColumnName(), $this->helper->getDefaultForeignColumnName($model->getTableName())); $arguments[] = $this->resolveArgument($relation->getLocalColumnName(), EmgHelper::DEFAULT_PRIMARY_KEY); } else { $arguments[] = $this->resolveArgument($relation->getForeignColumnName(), $this->helper->getDefaultForeignColumnName($relation->getTableName())); $arguments[] = $this->resolveArgument($relation->getLocalColumnName(), EmgHelper::DEFAULT_PRIMARY_KEY); } return sprintf('return $this->%s(%s);', $name, $this->prepareArguments($arguments)); }