|
|
|
@ -13,6 +13,7 @@ use yii\db\Connection;
|
|
|
|
|
use yii\db\Schema; |
|
|
|
|
use yii\gii\CodeFile; |
|
|
|
|
use yii\helpers\Inflector; |
|
|
|
|
use yii\base\NotSupportedException; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* This generator will generate one or multiple ActiveRecord classes for the specified database table. |
|
|
|
@ -247,7 +248,24 @@ class Generator extends \yii\gii\Generator
|
|
|
|
|
foreach ($lengths as $length => $columns) { |
|
|
|
|
$rules[] = "[['" . implode("', '", $columns) . "'], 'string', 'max' => $length]"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Unique indexes rules |
|
|
|
|
try { |
|
|
|
|
$db = $this->getDbConnection(); |
|
|
|
|
$uniqueIndexes = $db->getSchema()->findUniqueIndexes($table); |
|
|
|
|
foreach ($uniqueIndexes as $indexName => $uniqueColumns) { |
|
|
|
|
$attributesCount = count($uniqueColumns); |
|
|
|
|
if ($attributesCount == 1) { |
|
|
|
|
$rules[] = "['" . $uniqueColumns[0] . "', 'unique']"; |
|
|
|
|
} elseif ($attributesCount > 1) { |
|
|
|
|
$labels = array_intersect_key($this->generateLabels($table), array_flip($uniqueColumns)); |
|
|
|
|
$lastLabel = array_pop($labels); |
|
|
|
|
$columnsList = implode("', '", $uniqueColumns); |
|
|
|
|
$rules[] = "[['" . $columnsList . "'], 'unique', 'targetAttribute' => ['" . $columnsList . "'], 'message' => 'The combination of " . implode(', ', $labels) . " and " . $lastLabel . " has already been taken.']"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (NotSupportedException $e) { |
|
|
|
|
// doesn't support unique indexes information...do nothing |
|
|
|
|
} |
|
|
|
|
return $rules; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|