ModelCode::generateRelationName PHP Method

generateRelationName() protected method

Generate a name for use as a relation name (inside relations() function in a model).
protected generateRelationName ( $tableName, $fkName, $multiple ) : string
return string the relation name
    protected function generateRelationName($tableName, $fkName, $multiple)
    {
        if (strcasecmp(substr($fkName, -2), 'id') === 0 && strcasecmp($fkName, 'id')) {
            $relationName = rtrim(substr($fkName, 0, -2), '_');
        } else {
            $relationName = $fkName;
        }
        $relationName[0] = strtolower($relationName);
        $rawName = $relationName;
        if ($multiple) {
            $relationName = $this->pluralize($relationName);
        }
        $table = Yii::app()->{$this->connectionId}->schema->getTable($tableName);
        $i = 0;
        while (isset($table->columns[$relationName])) {
            $relationName = $rawName . $i++;
        }
        $names = preg_split('/_+/', $relationName, -1, PREG_SPLIT_NO_EMPTY);
        if (empty($names)) {
            return $relationName;
        }
        // unlikely
        for ($name = $names[0], $i = 1; $i < count($names); ++$i) {
            $name .= ucfirst($names[$i]);
        }
        return $name;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * Generate a name for use as a relation name (inside relations() function in a model).
  * @param string the name of the table to hold the relation
  * @param string the foreign key name
  * @param boolean whether the relation would contain multiple objects
  * @return string the relation name
  */
 protected function generateRelationName($tableName, $fkName, $multiple)
 {
     $relationName = parent::generateRelationName($tableName, $fkName, $multiple);
     return preg_replace('/Fk$/', '', $relationName);
 }