sql >> Database >  >> RDS >> Mysql

tabellen overslaan bij het uitvoeren van Doctrine convert-mapping

Het belangrijkste probleem met de conversie en validatie van Doctrine is dat het standaard de hele database en alle tabellen leest, ongeacht de entiteiten of mappings die er al dan niet voor zijn. Zelfs bij gebruik van de --filter="" vlag bij het aanroepen van orm:convert:mapping of orm:generate:entities

Om dit probleem te omzeilen en Doctrine tabellen te laten overslaan die Exceptions genereren, kunt u Doctrine zo instellen dat alleen de gewenste tabellen worden gelezen door ze te definiëren met 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);

OF u kunt het filter instellen voor de verbinding van een bestaande Entiteitsmanager.

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

Referentie:http://doctrine-orm.readthedocs.org/en /laatste/referentie/configuratie.html

Toegegeven, dit is geen manier om doctrine te vertellen om uitzonderingen te negeren, maar zou je moeten helpen om te beginnen met leren over een bestaande applicatie op een aantal specifieke tabellen in plaats van de hele database.

Als een kanttekening, aangezien je al zei dat je tabellen met links hebt. Als je refererende sleutels hebt in tabellen die je niet in het filter opneemt, zal de --from-database-conversie er nog steeds een referentie voor creëren. Je zult handmatig moeten wijzigen de toewijzing naar zijn onbewerkte vorm in plaats van de bijbehorende toewijzing van OneToMany, ManyToOne of ManyToMany.

Annotatietoewijzing Van 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;
}

Naar

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

Vergeet dan niet doctrine orm:validate-schema . te gebruiken om ervoor te zorgen dat de toewijzingen synchroon lopen.



  1. Kan ik automatisch Squeryl-gegevensobjecten genereren om een ​​bestaand MySql-schema weer te geven?

  2. Bewering in MySQL

  3. Kan geen verbinding maken met een van de opgegeven mysql-hosts. C# MySQL

  4. Print rangorde van som in PHP &MySQL in 1,1,3,4, enz. Bestellen