Doctrine2 Игнорировать таблицу базы данных

Я использую Doctrine 2, и я хочу создать ORM моей базы данных, но я не хочу выбирать все таблицы db.

Например, в этом db:

  • Таблица 1 не имеет первичного ключа
  • Таблица 2 является нормальной

Я хочу выбрать ТОЛЬКО таблицу 2 с помощью этой команды:

doctrine:mapping:convert --from-database yml ./src/Application/TestBundle/Resources/config/doctrine/metadata/orm --filter="Table2"

У меня есть ошибка:

Таблица Table_1 не имеет первичного ключа. Doctrine не поддерживает обратное проектирование из таблиц, у которых нет первичного ключа.

Хорошо, я знаю, но мне не нужна моя таблица 1 в моем ORM.

Когда моя таблица 1 имеет первичный ключ, я могу отфильтровать таблицы...

Как я могу решить эту проблему?

Я вижу следующее: Создание единого объекта из существующей базы данных с помощью symfony2 и доктрины

Но это не сработает.


Я отвечаю на мой вопрос.

В вашей конфигурации: config.yml, добавьте schema_filter, в моем случае:

schema_filter: ~^(?!Table1)~

Ответ 1

Если вы используете Doctrine2 без Symfony, вы должны добавить эту строку в свой bootstrap:

// With this expression all tables prefixed with Table1 will ignored by the schema tool.
$entityManager->getConnection()->getConfiguration()->setFilterSchemaAssetsExpression("~^(?!Table1)~");

вся загрузка выглядит как

<?php
// bootstrap.php

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;


// Include Composer Autoload (relative to project root).
require_once "vendor/autoload.php";

// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$paths = array(__DIR__."/doctrine/entities");

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/doctrine/yaml"), $isDevMode);

// the connection configuration
$dbParams = array(
  'driver'   => 'pdo_mysql',
  'user'     => 'username',
  'password' => 'password',
  'dbname'   => 'database',
);

/** @var $entityManager \Doctrine\ORM\EntityManager */
$entityManager = EntityManager::create($dbParams, $config);


// Set the other connections parameters
$conn = $entityManager->getConnection();


$platform = $conn->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');


// With this expression all tables prefixed with t_ will ignored by the schema tool.
$conn->getConfiguration()->setFilterSchemaAssetsExpression("~^(?!t__)~");

Ответ 2

Doctrine сначала проверяет ваши таблицы и только затем выполняет команду. Таким образом, у вас всегда должна быть действующая схема БД, чтобы делать с ней какие-либо операции.