mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-19 04:23:59 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\CodeGenerator\Common;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class GeneratorFieldRelation
|
||||
{
|
||||
/** @var string */
|
||||
public $type;
|
||||
public $inputs;
|
||||
public $relationName;
|
||||
|
||||
public static function parseRelation($relationInput)
|
||||
{
|
||||
$inputs = explode(',', $relationInput);
|
||||
|
||||
$relation = new self();
|
||||
$relation->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user