Чтобы добавить индекс в таблицу, вы можете просто вызвать addIndex()
метод объекта таблицы.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$table = $this->table('users');
$table->addColumn('city', 'string')
->addIndex(['city'])
->save();
}
/**
* Migrate Down.
*/
public function down()
{
}
}
По умолчанию Phinx указывает адаптеру базы данных создать нормальный индекс. Мы можем передать дополнительный параметр unique
в addIndex()
методе , чтобы указать уникальный индекс. Мы также можем явно указать имя индекса с помощью name
параметра, порядок сортировки столбцов индекса также можно указать с помощью order
параметра. Параметр порядка принимает массив имен столбцов и пары ключ / значение порядка сортировки.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$table = $this->table('users');
$table->addColumn('email', 'string')
->addColumn('username','string')
->addIndex(['email', 'username'], [
'unique' => true,
'name' => 'idx_users_email',
'order' => ['email' => 'DESC', 'username' => 'ASC']]
)
->save();
}
/**
* Migrate Down.
*/
public function down()
{
}
}
Адаптер MySQL также поддерживает fulltext
индексы. Если вы используете версию до 5.6, вы должны убедиться, что таблица использует MyISAM
движок.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
public function change()
{
$table = $this->table('users', ['engine' => 'MyISAM']);
$table->addColumn('email', 'string')
->addIndex('email', ['type' => 'fulltext'])
->create();
}
}
Кроме того, адаптер MySQL также поддерживает установку длины индекса, определяемой параметром limit. При использовании индекса с несколькими столбцами вы можете определить длину индекса каждого столбца. Индекс одного столбца может определять длину своего индекса с указанием имени столбца или без него в параметре ограничения.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
public function change()
{
$table = $this->table('users');
$table->addColumn('email', 'string')
->addColumn('username','string')
->addColumn('user_guid', 'string', ['limit' => 36])
->addIndex(['email','username'], ['limit' => ['email' => 5, 'username' => 2]])
->addIndex('user_guid', ['limit' => 6])
->create();
}
}
Адаптеры SQL Server и PostgreSQL также поддерживают include
(неключевые) столбцы в индексах.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
public function change()
{
$table = $this->table('users');
$table->addColumn('email', 'string')
->addColumn('firstname','string')
->addColumn('lastname','string')
->addIndex(['email'], ['include' => ['firstname', 'lastname']])
->create();
}
}
Удалить индексы так же просто, как вызвать removeIndex()
метод. Вы должны вызвать этот метод для каждого индекса.
<?php
use Phinx\Migration\AbstractMigration;
class MyNewMigration extends AbstractMigration
{
/**
* Migrate Up.
*/
public function up()
{
$table = $this->table('users');
$table->removeIndex(['email'])
->save();
// alternatively, you can delete an index by its name, ie:
$table->removeIndexByName('idx_users_email')
->save();
}
/**
* Migrate Down.
*/
public function down()
{
}
}
0 комментариев