type = array_shift($inputs); $modelWithRelation = explode(':', array_shift($inputs)); //e.g ModelName:relationName if (count($modelWithRelation) == 2) { $relation->relationName = $modelWithRelation[1]; unset($modelWithRelation[1]); } $relation->inputs = array_merge($modelWithRelation, $inputs); return $relation; } public function getRelationFunctionText($relationText = null) { $singularRelation = (!empty($this->relationName)) ? $this->relationName : Str::camel($relationText); $pluralRelation = (!empty($this->relationName)) ? $this->relationName : Str::camel(Str::plural($relationText)); switch ($this->type) { case '1t1': $functionName = $singularRelation; $relation = 'hasOne'; $relationClass = 'HasOne'; break; case '1tm': $functionName = $pluralRelation; $relation = 'hasMany'; $relationClass = 'HasMany'; break; case 'mt1': if (!empty($this->relationName)) { $singularRelation = $this->relationName; } elseif (isset($this->inputs[1])) { $singularRelation = Str::camel(str_replace('_id', '', strtolower($this->inputs[1]))); } $functionName = $singularRelation; $relation = 'belongsTo'; $relationClass = 'BelongsTo'; break; case 'mtm': $functionName = $pluralRelation; $relation = 'belongsToMany'; $relationClass = 'BelongsToMany'; break; case 'hmt': $functionName = $pluralRelation; $relation = 'hasManyThrough'; $relationClass = 'HasManyThrough'; break; default: $functionName = ''; $relation = ''; $relationClass = ''; break; } if (!empty($functionName) and !empty($relation)) { return $this->generateRelation($functionName, $relation, $relationClass); } return ''; } private function generateRelation($functionName, $relation, $relationClass) { $inputs = $this->inputs; $modelName = array_shift($inputs); $template = (new GeneratorHelpers())->get_template('Models.relationship'); $template = str_replace('$RELATIONSHIP_CLASS$', $relationClass, $template); $template = str_replace('$FUNCTION_NAME$', $functionName, $template); $template = str_replace('$RELATION$', $relation, $template); $template = str_replace('$RELATION_MODEL_NAME$', $modelName, $template); if (count($inputs) > 0) { $inputFields = implode("', '", $inputs); $inputFields = ", '".$inputFields."'"; } else { $inputFields = ''; } $template = str_replace('$INPUT_FIELDS$', $inputFields, $template); return $template; } }