13

Doctrine 2 を使用していて、データベースの ORM を生成したいのですが、データベースのすべてのテーブルを選択したくありません。

たとえば、このデータベースでは次のようになります。

  • 表 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 に主キーがある場合、テーブルをフィルター処理できます。Generating a single Entity from existing database using symfony2 and doctrine を見てきまし たが、うまくいきません。

4

4 に答える 4

4

Symfony なしで Doctrine2 を使用する場合は、次の行をブートストラップに追加する必要があります。

// 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__)~");
于 2015-09-20T19:05:00.640 に答える
-2

Doctrine は最初にテーブルを検証してからコマンドを実行します。したがって、操作を行うには、常に有効な DB スキーマが必要です。

于 2014-07-03T09:25:46.530 に答える