Когда вы инициализируете свой проект с помощью команды Init , Phinx создает файл по умолчанию в корне каталога вашего проекта. По умолчанию этот файл использует формат сериализации данных YAML, но вы можете использовать --format
параметр командной строки , чтобы указать либо yaml
, yml
, json
или php
.
Если --configuration
указан параметр командной строки, Phinx загрузит указанный файл. В противном случае, он будет пытаться найти phinx.php
, phinx.json
, phinx.yml
или phinx.yaml
и загрузить первый файл найден.
Не забудьте хранить файл конфигурации вне общедоступного каталога на вашем веб-сервере. Этот файл содержит учетные данные вашей базы данных и может быть случайно использован как обычный текст.
Обратите внимание , что в то время как JSON и YAML файлы разобраны , файл РНР включен . Это означает, что:
- Он должен возвращать массив элементов конфигурации.
- Область видимости переменной является локальной, т.е. вам нужно будет явно объявить любые глобальные переменные, которые ваш файл инициализации читает или изменяет.
- Его стандартный вывод подавлен.
- В отличие от JSON и YAML, можно опустить детали подключения к среде и вместо этого указать,
connection
какая из них должна содержать инициализированный экземпляр PDO. Это полезно, когда вы хотите, чтобы ваши миграции взаимодействовали с вашим приложением и / или использовали одно и то же соединение. Однако не забудьте также передать имя базы данных, поскольку Phinx не может вывести это из соединения PDO.
$app = require 'app/phinx.php';
$pdo = $app->getDatabase()->getPdo();
return [
'environments' => [
'default_environment' => 'development',
'development' => [
'name' => 'devdb',
'connection' => $pdo
]
]
];
Пути миграции
Первый вариант указывает путь к вашему каталогу миграции. Phinx %%PHINX_CONFIG_DIR%%/db/migrations
по умолчанию использует.
%%PHINX_CONFIG_DIR%%
- это специальный токен, который автоматически заменяется корневым каталогом, в котором хранится ваш файл конфигурации phinx.
Чтобы перезаписать значение по умолчанию %%PHINX_CONFIG_DIR%%/db/migrations
, вам необходимо добавить в конфигурацию следующее.
paths:
migrations: /your/full/path
Вы также можете указать несколько путей миграции, используя массив в своей конфигурации:
paths:
migrations:
- application/module1/migrations
- application/module2/migrations
Вы также можете использовать %%PHINX_CONFIG_DIR%%
токен на своем пути.
paths:
migrations: '%%PHINX_CONFIG_DIR%%/your/relative/path'
Миграции фиксируются с помощью glob
, поэтому вы можете определить шаблон для нескольких каталогов.
paths:
migrations: '%%PHINX_CONFIG_DIR%%/module/*/{data,scripts}/migrations'
База нестандартной миграции
По умолчанию все миграции производятся из класса AbstractMigration в Phinx . Это можно установить в настраиваемый класс, который расширяется от AbstractMigration , установив migration_base_class
в вашей конфигурации:
migration_base_class: MyMagicalMigration
Paths seeds
Второй вариант указывает путь к вашему исходному каталогу. Phinx %%PHINX_CONFIG_DIR%%/db/seeds
по умолчанию использует.
%%PHINX_CONFIG_DIR%%
- это специальный токен, который автоматически заменяется корневым каталогом, в котором хранится ваш файл конфигурации.
Чтобы перезаписать значение по умолчанию %%PHINX_CONFIG_DIR%%/db/seeds
, вам необходимо добавить следующее в конфигурацию yaml.
paths:
seeds: /your/full/path
Вы также можете указать несколько исходных путей, используя массив в своей конфигурации:
paths:
seeds:
- /your/full/path1
- /your/full/path2
Вы также можете использовать %%PHINX_CONFIG_DIR%%
токен на своем пути.
paths:
seeds: '%%PHINX_CONFIG_DIR%%/your/relative/path'
Специальная база сеялки
По умолчанию все сидеры будут производными от класса AbstractSeed Phinx . Это можно установить в настраиваемый класс, который расширяется от AbstractSeed , установив seeder_base_class
в вашей конфигурации:
seeder_base_class: MyMagicalSeeder
Среды
Одна из ключевых особенностей Phinx - поддержка нескольких сред баз данных. Вы можете использовать Phinx для создания миграций в своей среде разработки, а затем запускать те же миграции в производственной среде. Среды указаны во environments
вложенной коллекции. Например:
environments:
default_migration_table: phinxlog
default_environment: development
production:
adapter: mysql
host: localhost
name: production_db
user: root
pass: ''
port: 3306
charset: utf8
collation: utf8_unicode_ci
определит новую среду под названием production
.
В ситуации, когда несколько разработчиков работают над одним и тем же проектом и у каждого из них своя среда (например, соглашение ), или когда вам нужно иметь отдельные среды для разных целей (ветки, тестирование и т. Д.), Используйте переменную среды PHINX_ENVIRONMENT, чтобы переопределить окружение по умолчанию в файле yaml:--
export PHINX_ENVIRONMENT=dev-`whoami`-`hostname`
Таблица миграции
Чтобы отслеживать статусы миграции для среды, phinx создает таблицу для хранения этой информации. Вы можете настроить, где будет создаваться эта таблица, настроив default_migration_table
:
environment:
default_migration_table: phinxlog
Если это поле опущено, по умолчанию используется phinxlog
. Для баз данных, которые его поддерживают, например Postgres, имя схемы может начинаться с разделителя точки ( .
). Например, phinx.log
создать таблицу log
в phinx
схеме вместо phinxlog
в public
( по умолчанию) схеме.
Префикс и суффикс таблицы
Вы можете определить префикс таблицы и суффикс таблицы:
environments:
development:
....
table_prefix: dev_
table_suffix: _v1
testing:
....
table_prefix: test_
table_suffix: _v2
Socket Connections
При использовании адаптера MySQL также можно использовать сокеты вместо сетевых подключений. Путь к сокету настроен с помощью unix_socket
:
environments:
default_migration_table: phinxlog
default_environment: development
production:
adapter: mysql
name: production_db
user: root
pass: ''
unix_socket: /var/run/mysql/mysql.sock
charset: utf8
Внешние переменные
Phinx автоматически получит любую переменную среды с префиксом PHINX_
и сделает ее доступной в качестве токена в файле конфигурации. У токена будет точно такое же имя, что и у переменной, но вы должны получить к нему доступ, заключив два %%
символа с каждой стороны. например: '%%PHINX_DBUSER%%'
. Это особенно полезно, если вы хотите хранить учетные данные секретной базы данных непосредственно на сервере, а не в системе контроля версий. Эту возможность легко продемонстрировать на следующем примере:
environments:
default_migration_table: phinxlog
default_environment: development
production:
adapter: mysql
host: '%%PHINX_DBHOST%%'
name: '%%PHINX_DBNAME%%'
user: '%%PHINX_DBUSER%%'
pass: '%%PHINX_DBPASS%%'
port: 3306
charset: utf8
Имена источников данных
Phinx поддерживает использование имен источников данных (DSN) для указания параметров подключения, что может быть полезно, если вы используете одну переменную среды для хранения учетных данных базы данных. PDO имеет разные форматы DSN в зависимости от базового драйвера, поэтому Phinx использует формат DSN, не зависящий от базы данных, используемый другими проектами (Doctrine, Rails, AMQP, PaaS и т. Д.).
://[[:]@][:]/[?]
DSN требует как минимум adapter
, host
и name
.
Вы не можете указать пароль без имени пользователя.
port
должно быть положительным целым числом.
additionalOptions
принимает форму строки запроса и передается адаптеру в массиве параметров.
environments:
default_migration_table: phinxlog
default_environment: development
production:
# Example data source name
dsn: mysql://root@localhost:3306/mydb?charset=utf8
После анализа DSN его значения объединяются с уже существующими параметрами подключения. Значения, указанные в DSN, никогда не переопределят любое значение, указанное непосредственно в качестве параметров подключения.
environments:
default_migration_table: phinxlog
default_environment: development
development:
dsn: %%DATABASE_URL%%
production:
dsn: %%DATABASE_URL%%
name: production_database
Если предоставленный DSN недействителен, он полностью игнорируется.
Поддерживаемые адаптеры
В настоящее время Phinx изначально поддерживает следующие адаптеры баз данных:
- MySQL : укажите
mysql
адаптер. - PostgreSQL : укажите
pgsql
адаптер. - SQLite : укажите
sqlite
адаптер. - SQL Server : укажите
sqlsrv
адаптер.
Для каждого адаптера вы можете настроить поведение базового объекта PDO, установив в своем объекте конфигурации строчную версию имени константы. Это работает как для параметров PDO (например \PDO::ATTR_CASE
, будет attr_case
), так и для параметров адаптера (например, для MySQL вы можете установить \PDO::MYSQL_ATTR_IGNORE_SPACE
как mysql_attr_ignore_space
).
Например, чтобы установить параметры приведенного выше примера:
$config = [
"environments" => [
"development" => [
"adapter" => "mysql",
# other adapter settings
"attr_case" => \PDO::ATTR_CASE,
"mysql_attr_ignore_space" => 1,
],
],
];
По умолчанию единственный атрибут, который устанавливает Phinx, - \PDO::ATTR_ERRMODE
это PDO::ERRMODE_EXCEPTION
. Не рекомендуется отменять это.
MySQL
У адаптера MySQL есть досадное ограничение: некоторые действия вызывают неявную фиксацию независимо от состояния транзакции. Примечательно, что этот список включает , и , которые являются наиболее распространенными операциями, которые выполняет Phinx. Это означает, что в отличие от других адаптеров, которые будут пытаться изящно откатить транзакцию при неудачной миграции, если миграция не удалась для MySQL, она может оставить вашу БД в частично перенесенном состоянии.CREATE TABLEALTER TABLEDROP TABLE
SQLite
Объявление базы данных SQLite использует упрощенную структуру:
environments:
development:
adapter: sqlite
name: ./data/derby
suffix: ".db" # Defaults to ".sqlite3"
testing:
adapter: sqlite
memory: true # Setting memory to *any* value overrides name
SQL Server
При использовании sqlsrv
адаптера и подключении к именованному экземпляру вы должны опустить port
настройку, так как SQL Server будет согласовывать порт автоматически. Кроме того, опустите или измените значение, соответствующее UTF8 для SQL Server.charset: utf8charset: 65001
Пользовательские адаптеры
Вы можете предоставить собственный адаптер путем регистрации реализации Phinx \ Db \ адаптер \ AdapterInterface с AdapterFactory :
$name = 'fizz';
$class = 'Acme\Adapter\FizzAdapter';
AdapterFactory::instance()->registerAdapter($name, $class);
Адаптеры можно зарегистрировать в любое время до вызова $ app-> run () , который обычно вызывается bin / phinx .
Псевдонимы
Имена классов создания шаблонов могут иметь псевдонимы и использоваться с параметром --class
командной строки для команды Create .
Классы с псевдонимами по-прежнему потребуются для реализации Phinx\Migration\CreationInterface
интерфейса.
aliases:
permission: \Namespace\Migrations\PermissionMigrationTemplateGenerator
view: \Namespace\Migrations\ViewMigrationTemplateGenerator
Порядок версий
При откате или печати статуса миграций Phinx упорядочивает выполненные миграции в соответствии с version_order
опцией, которая может иметь следующие значения:
creation
(по умолчанию): миграции упорядочиваются по времени их создания, которое также является частью их имени файла.
execution
: миграции упорядочены по времени их выполнения, также известному как время начала.
Путь начальной загрузки
Вы можете указать путь к php-файлу начальной загрузки, который будет включен перед запуском любых команд phinx. Обратите внимание, что установка внешних переменных для изменения конфигурации не будет работать, потому что к этому моменту конфигурация уже была проанализирована.
paths:
bootstrap: 'phinx-bootstrap.php'
В сценарии начальной загрузки будут доступны следующие переменные:
/**
* @var string $filename The file name as provided by the configuration
* @var string $filePath The absolute, real path to the file
* @var \Symfony\Component\Console\Input\InputInterface $input The executing command's input object
* @var \Symfony\Component\Console\Output\OutputInterface $output The executing command's output object
* @var \Phinx\Console\Command\AbstractCommand $context the executing command object
*/
0 комментариев