schmunk42\giiant\generators\model\Generator::generateRelationName PHP Method

generateRelationName() public method

public generateRelationName ( $relations, $table, $key, $multiple )
    public function generateRelationName($relations, $table, $key, $multiple)
    {
        return parent::generateRelationName($relations, $table, $key, $multiple);
    }

Usage Example

Example #1
0
 /**
  * Finds relations of a model class.
  *
  * return values can be filtered by types 'belongs_to', 'many_many', 'has_many', 'has_one', 'pivot'
  *
  * @param ActiveRecord $modelClass
  * @param array        $types
  *
  * @return array
  */
 public function getModelRelations($modelClass, $types = ['belongs_to', 'many_many', 'has_many', 'has_one', 'pivot'])
 {
     $reflector = new \ReflectionClass($modelClass);
     $model = new $modelClass();
     $stack = [];
     $modelGenerator = new ModelGenerator();
     foreach ($reflector->getMethods() as $method) {
         if (in_array(substr($method->name, 3), $this->skipRelations)) {
             continue;
         }
         // look for getters
         if (substr($method->name, 0, 3) !== 'get') {
             continue;
         }
         // skip class specific getters
         $skipMethods = ['getRelation', 'getBehavior', 'getFirstError', 'getAttribute', 'getAttributeLabel', 'getOldAttribute'];
         if (in_array($method->name, $skipMethods)) {
             continue;
         }
         // check for relation
         try {
             $relation = @call_user_func(array($model, $method->name));
             if ($relation instanceof \yii\db\ActiveQuery) {
                 #var_dump($relation->primaryModel->primaryKey);
                 if ($relation->multiple === false) {
                     $relationType = 'belongs_to';
                 } elseif ($this->isPivotRelation($relation)) {
                     # TODO: detecttion
                     $relationType = 'pivot';
                 } else {
                     $relationType = 'has_many';
                 }
                 if (in_array($relationType, $types)) {
                     $name = $modelGenerator->generateRelationName([$relation], $model->getTableSchema(), substr($method->name, 3), $relation->multiple);
                     $stack[$name] = $relation;
                 }
             }
         } catch (Exception $e) {
             Yii::error('Error: ' . $e->getMessage(), __METHOD__);
         }
     }
     return $stack;
 }