Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
407ce758
Commit
407ce758
authored
Jun 18, 2014
by
Klimov Paul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
`yii\mongodb\console\controllers\MigrateController` created
parent
3d7a91e1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
184 additions
and
0 deletions
+184
-0
MigrateController.php
extensions/mongodb/console/controllers/MigrateController.php
+160
-0
migration.php
extensions/mongodb/views/migration.php
+24
-0
No files found.
extensions/mongodb/console/controllers/MigrateController.php
0 → 100644
View file @
407ce758
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
yii\mongodb\console\controllers
;
use
Yii
;
use
yii\console\controllers\BaseMigrateController
;
use
yii\console\Exception
;
use
yii\mongodb\Connection
;
use
yii\mongodb\Query
;
use
yii\helpers\ArrayHelper
;
/**
* Manages application MongoDB migrations.
*
* This is an analog of [[\yii\console\controllers|MigrateController]] for MongoDB.
*
* This command provides support for tracking the migration history, upgrading
* or downloading with migrations, and creating new migration skeletons.
*
* The migration history is stored in a MongoDB collection named
* as [[migrationCollection]]. This collection will be automatically created the first time
* this command is executed, if it does not exist.
*
* In order to enable this command you should adjust the configuration of your console application:
*
* ~~~
* return [
* // ...
* 'controllerMap' => [
* 'mongodb-migrate' => 'yii\mongodb\console\controllers\MigrateController'
* ],
* ];
* ~~~
*
* Below are some common usages of this command:
*
* ~~~
* # creates a new migration named 'create_user_table'
* yii mongodb-migrate/create create_user_table
*
* # applies ALL new migrations
* yii mongodb-migrate
*
* # reverts the last applied migration
* yii mongodb-migrate/down
* ~~~
*
* @author Klimov Paul <klimov@zfort.com>
* @since 2.0
*/
class
MigrateController
extends
BaseMigrateController
{
/**
* @var string|array the name of the collection for keeping applied migration information.
*/
public
$migrationCollection
=
'migration'
;
/**
* @inheritdoc
*/
public
$templateFile
=
'@yii/mongodb/views/migration.php'
;
/**
* @var Connection|string the DB connection object or the application
* component ID of the DB connection.
*/
public
$db
=
'mongodb'
;
/**
* @inheritdoc
*/
public
function
options
(
$actionId
)
{
return
array_merge
(
parent
::
options
(
$actionId
),
[
'migrationCollection'
,
'db'
]
// global for all actions
);
}
/**
* This method is invoked right before an action is to be executed (after all possible filters.)
* It checks the existence of the [[migrationPath]].
* @param \yii\base\Action $action the action to be executed.
* @throws Exception if db component isn't configured
* @return boolean whether the action should continue to be executed.
*/
public
function
beforeAction
(
$action
)
{
if
(
parent
::
beforeAction
(
$action
))
{
if
(
$action
->
id
!==
'create'
)
{
if
(
is_string
(
$this
->
db
))
{
$this
->
db
=
Yii
::
$app
->
get
(
$this
->
db
);
}
if
(
!
$this
->
db
instanceof
Connection
)
{
throw
new
Exception
(
"The 'db' option must refer to the application component ID of a MongoDB connection."
);
}
}
return
true
;
}
else
{
return
false
;
}
}
/**
* Creates a new migration instance.
* @param string $class the migration class name
* @return \yii\mongodb\Migration the migration instance
*/
protected
function
createMigration
(
$class
)
{
$file
=
$this
->
migrationPath
.
DIRECTORY_SEPARATOR
.
$class
.
'.php'
;
require_once
(
$file
);
return
new
$class
([
'db'
=>
$this
->
db
]);
}
/**
* @inheritdoc
*/
protected
function
getMigrationHistory
(
$limit
)
{
$query
=
new
Query
;
$rows
=
$query
->
select
([
'version'
,
'apply_time'
])
->
from
(
$this
->
migrationCollection
)
->
orderBy
(
'version DESC'
)
->
limit
(
$limit
)
->
all
(
$this
->
db
);
$history
=
ArrayHelper
::
map
(
$rows
,
'version'
,
'apply_time'
);
if
(
empty
(
$history
))
{
$this
->
addMigrationHistory
(
self
::
BASE_MIGRATION
);
}
unset
(
$history
[
self
::
BASE_MIGRATION
]);
return
$history
;
}
/**
* @inheritdoc
*/
protected
function
addMigrationHistory
(
$version
)
{
$this
->
db
->
getCollection
(
$this
->
migrationCollection
)
->
insert
([
'version'
=>
$version
,
'apply_time'
=>
time
(),
]);
}
/**
* @inheritdoc
*/
protected
function
removeMigrationHistory
(
$version
)
{
$this
->
db
->
getCollection
(
$this
->
migrationCollection
)
->
remove
([
'version'
=>
$version
,
]);
}
}
extensions/mongodb/views/migration.php
0 → 100644
View file @
407ce758
<?php
/**
* This view is used by console/controllers/MigrateController.php
* The following variables are available in this view:
*
* @var string $className the new migration class name
*/
echo
"<?php
\n
"
;
?>
class
<?=
$className
?>
extends \yii\mongodb\Migration
{
public function up()
{
}
public function down()
{
echo "
<?=
$className
?>
cannot be reverted.\n";
return false;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment