/** * @return JsExpression */ public function getBaseModelClassAutoComplete() { $data = []; foreach (Helper::getModelDeepNamespaces() as $modelNs) { $data[] = $modelNs . '\\base\\*Base'; } return new JsExpression('function (request, response) { response(' . Json::htmlEncode($data) . '); }'); }
/** * @inheritdoc */ public function bootstrap($app) { parent::bootstrap($app); foreach (Helper::getDbConnections() as $db) { if (in_array($db->getDriverName(), ['mysql', 'mysqli'])) { $db->schemaMap = array_merge($db->schemaMap, ['mysql' => 'yii\\gii\\plus\\db\\mysql\\Schema', 'mysqli' => 'yii\\gii\\plus\\db\\mysql\\Schema']); } } if ($app instanceof WebApplication) { $this->setViewPath(Yii::getAlias('@yii/gii/views')); } }
if ($relation['direct']) { $depends[] = $relationFixtureClass; } else { $backDepends[] = $relationFixtureClass; } } } } if (count($depends)) { echo ' public $depends = ', Helper::implode($depends, 1), '; '; } if (count($backDepends)) { echo ' public $backDepends = ', Helper::implode($backDepends, 1), '; '; } echo ' /*[ '; /* @var $columns yii\gii\plus\db\ColumnSchema[] */ $columns = array_values($tableSchema->columns); foreach ($columns as $i => $column) { $comma = $i < count($columns) - 1 ? ',' : ''; echo ' \'', $column->name, '\' => \'\'', $comma, ' '; } echo ' ]*/ public $dataFile = \'', $dataFile, '\';
'; } } } // use if (array_key_exists($tableName, $relationUses) && in_array('yii\\db\\Expression', $relationUses[$tableName])) { $dbExpression = 'Expression'; } else { $dbExpression = '\\yii\\db\\Expression'; } // list items foreach ($tableSchema->foreignKeys as $foreignKey) { $foreignTableName = $foreignKey[0]; unset($foreignKey[0]); /* @var $foreignModelClass string|\yii\boost\db\ActiveRecord */ $foreignModelClass = Helper::getModelClassByTableName($foreignTableName); if ($foreignModelClass && class_exists($foreignModelClass)) { $primaryKey = $foreignModelClass::primaryKey(); if (count($primaryKey) == 1) { $attribute = array_search($primaryKey[0], $foreignKey); if ($attribute) { $attributeArg = Inflector::variablize($attribute); $listItemConditions = []; if (count($foreignKey) > 1) { foreach (array_diff($foreignKey, $primaryKey) as $key1 => $key2) { $listItemConditions[] = '\'' . $key2 . '\' => $this->' . $key1; } if (count($listItemConditions) == 1) { $listItemConditions = $listItemConditions[0]; } else { $listItemConditions = '
use yii\gii\plus\helpers\Helper; use yii\helpers\Inflector; /* @var $this yii\web\View */ /* @var $generator yii\gii\plus\generators\custom\model\Generator */ /* @var $ns string */ /* @var $modelName string */ /* @var $modelClass string|yii\boost\db\ActiveRecord */ /* @var $baseModelName string */ /* @var $baseModelClass string|yii\boost\db\ActiveRecord */ /* @var $queryNs string */ /* @var $queryName string */ /* @var $queryClass string|yii\boost\db\ActiveQuery */ /* @var $baseQueryName string */ /* @var $baseQueryClass string|yii\boost\db\ActiveQuery */ /* @var $tableSchema yii\gii\plus\db\TableSchema */ $uses = [$baseQueryClass]; Helper::sortUses($uses); echo '<?php namespace ', $queryNs, '; use ', implode(';' . "\n" . 'use ', $uses), '; /** * ', Inflector::titleize($queryName), ' * @see \\', $modelClass, ' */ class ', $queryName, ' extends ', $baseQueryName, ' { } ';
/** * @inheritdoc */ public function render($template, $params = []) { $output = parent::render($template, $params); switch ($template) { case 'model.php': // fix uses $tableName = $params['tableName']; if (array_key_exists($tableName, $this->relationUses) && $this->relationUses[$tableName]) { $uses = array_unique($this->relationUses[$tableName]); Helper::sortUses($uses); $output = str_replace('use Yii;', 'use Yii;' . "\n" . 'use ' . implode(';' . "\n" . 'use ', $uses) . ';', $output); } // fix rules $output = preg_replace('~\'targetClass\' \\=\\> (\\w+)Base\\:\\:className\\(\\)~', '\'targetClass\' => $1::className()', $output); // fix relations $nsClassName = $this->ns . '\\' . $params['className']; if (class_exists($nsClassName) && is_subclass_of($nsClassName, 'yii\\boost\\db\\ActiveRecord')) { $model = new $nsClassName(); $output = preg_replace_callback('~@return \\\\(yii\\\\db\\\\ActiveQuery)\\s+\\*/\\s+public function ([^\\(]+)\\(\\)~', function ($match) use($model) { if (method_exists($model, $match[2])) { return str_replace($match[1], get_class(call_user_func([$model, $match[2]])) . '|\\' . $match[1], $match[0]); } else { return $match[0]; } }, $output); } $params['relationUses'] = $this->relationUses; if (array_key_exists($tableName, $this->allRelations)) { $params['allRelations'] = $this->allRelations[$tableName]; } else { $params['allRelations'] = []; } if (array_key_exists($tableName, $this->singularRelations)) { $params['singularRelations'] = $this->singularRelations[$tableName]; } else { $params['singularRelations'] = []; } if (array_key_exists($tableName, $this->pluralRelations)) { $params['pluralRelations'] = $this->pluralRelations[$tableName]; } else { $params['pluralRelations'] = []; } $output = preg_replace('~\\}(\\s*)$~', parent::render('model-part.php', $params) . '}$1', $output); break; case 'query.php': $code = <<<CODE /*public function active() { return \$this->andWhere('[[status]]=1'); }*/ CODE; $output = str_replace($code, '', $output); $output = preg_replace('~\\}(\\s*)$~', parent::render('query-part.php', $params) . '}$1', $output); break; } $output = preg_replace_callback('~(@return |return new )\\\\((?:\\w+\\\\)*\\w+\\\\query)\\\\base\\\\(\\w+Query)Base~', function ($match) { $nsClassName = $match[2] . '\\' . $match[3]; if (class_exists($nsClassName)) { return $match[1] . '\\' . $nsClassName; } else { return $match[0]; } }, $output); $output = preg_replace_callback('~(@see | @return |\\[\\[)\\\\((?:\\w+\\\\)*\\w+)\\\\base\\\\(\\w+)Base~', function ($match) { $nsClassName = $match[2] . '\\' . $match[3]; if (class_exists($nsClassName)) { return $match[1] . '\\' . $nsClassName; } else { return $match[0]; } }, $output); return $output; }