Отключить внешние ключи в Doctrine Migrations
Я использую движок NDBCLUSTER в БД MySQL. Я добавил класс для упаковки Connection
и добавив опцию двигателя:
namespace AppBundle\DBAL;
use Doctrine\DBAL\Connection as BaseConnection;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Configuration;
use Doctrine\Common\EventManager;
class Connection extends BaseConnection
{
public function __construct(array $params, Driver $driver, Configuration $config = null, EventManager $eventManager = null)
{
if (isset($params['driverOptions']['engine'])) {
$params['defaultTableOptions']['engine'] = $params['driverOptions']['engine'];
}
return parent::__construct($params, $driver, $config, $eventManager);
}
}
Я определяю engine
вариант в config.yml
файл:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
wrapper_class: AppBundle\DBAL\Connection
options:
engine: NDBCLUSTER
orm:
auto_generate_proxy_classes: "%kernel.debug%"
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle: ~
Затем, если я выполню php app/console doctrine:migrations:diff
двигатель NDBCLUSTER добавляется к CREATE
заявления. Однако внешние ключи также добавляются, и NDBCLUSTER не принимает внешние ключи. Есть ли способ отключить внешние ключи (я имею в виду, не записывая их в файлы миграции)?
1 ответ
Я отключил внешние ключи, реализовав свой собственный platform_service для этого соединения:
namespace AcmeBundle\Doctrine;
use Doctrine\DBAL\Platforms\MySQL57Platform;
class CustomMySQLPlatform extends MySQL57Platform
{
public function supportsForeignKeyConstraints()
{
return false;
}
public function supportsForeignKeyOnUpdate()
{
return false;
}
}
Определение сервиса в services.yml:
acme.dbal.service.custom_mysql_platform:
class: AcmeBundle\Doctrine\CustomMySQLPlatform
Определение доктрины DBAL в config.yml:
doctrine:
dbal:
connections:
default:
....
platform_service: acme.dbal.service.custom_mysql_platform