sql >> Database teknologi >  >> RDS >> Mysql

spring tabeller over, når du kører Doctrine convert-mapping

Hovedproblemet med Doctrines konvertering og validering er, at den læser hele databasen og alle tabeller som standard, uanset hvilke Entiteter eller Mappings for dem, der eksisterer eller ej. Selv når du bruger --filter="" flag, når du kalder orm:convert:mapping eller orm:generate:entities

For at komme uden om dette problem og få Doctrin til at springe tabeller over, der afgiver undtagelser, kan du indstille Doctrin til kun at læse de tabeller, du ønsker, ved at definere dem med setFilterSchemaAssetsExpression

$isDev = true;

$config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('/path/to/entities'), $isDev);
$config->setFilterSchemaAssetsExpression('/^(table1|table2|prefixed_.*|.*_suffixed)$/');

$em =  \Doctrine\ORM\EntityManager::create(array(
    'driver' => 'db_driver',
    'host' => 'localhost',
    'user' => 'user_name',
    'password' => 'user_password',
    'dbname' => 'database',
), $config);

ELLER du kan indstille filteret for tilslutning af en eksisterende enhedsadministrator.

$em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/');

Reference:http://doctrine-orm.readthedocs.org/en /latest/reference/configuration.html

Indrømmet, dette er ikke en måde at fortælle doktrinen om at ignorere undtagelser, men det skulle hjælpe dig med at komme i gang med at lære om en eksisterende applikation på nogle specifikke tabeller i stedet for hele databasen.

Som en sidebemærkning, siden du nævnte, har du linktabeller. Hvis du har fremmednøgler i tabeller, som du ikke inkluderer i filteret, vil --from-database-konverteringen stadig skabe en reference til det. Du bliver nødt til manuelt at ændre kortlægningen til dens rå form snarere end den tilknyttede kortlægning af OneToMany, ManyToOne eller ManyToMany.

Annotation Mapping Fra doctrine orm:convert:mapping --from-database annotation /path/to/entities

/**
 * @ORM\Entity
 * @ORM\Table(name="order")
 */
class Order
{
  /** 
   * @var \Customer
   * @ORM\ManyToOne(targetEntity="Customer")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="customer", referencedColumnName="id", nullable=true)
   * })
   */
   private customer;
}

Til

/**
 * @ORM\Entity
 * @ORM\Table(name="order")
 */
class Order
{
  /** 
   * @var integer
   * @ORM\Column(name="customer", type="integer", nullable=true)
   */
   private customer;
}

Så glem ikke at bruge doctrine orm:validate-schema for at sikre, at tilknytningerne er synkroniserede.



  1. Udforsker Storage Engine-indstillinger for MariaDB

  2. Hvordan kan jeg VÆLGE rækker med MAX(kolonneværdi), PARTITION efter en anden kolonne i MYSQL?

  3. ORACLE - Vælg Tæl på en underforespørgsel

  4. MySQL installation