/**
  * @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));
 }