sql >> Databasteknik >  >> RDS >> Mysql

hoppa över tabeller när du kör Doctrine convert-mapping

Huvudproblemet med Doctrines konvertering och validering är att den läser hela databasen och alla tabeller som standard, oavsett vilka enheter eller mappningar som finns för dem eller inte. Även när du använder --filter="" flagga när du anropar orm:convert:mapping eller orm:generate:entities

För att komma runt det här problemet och för att få Doctrine att hoppa över tabeller som ger undantag, kan du ställa in Doctrine att bara läsa de tabeller du vill, genom att definiera 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 så kan du ställa in filtret för anslutningen av en befintlig Entity Manager.

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

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

Visserligen är detta inte ett sätt att säga till doktrinen att ignorera undantag, men det borde hjälpa dig att komma igång med att lära dig om ett befintligt program på vissa specifika tabeller istället för hela databasen.

Som en sidoanteckning sedan du nämnde att du har länktabeller. Om du har främmande nycklar i tabeller som du inte inkluderar i filtret, kommer --from-database-konverteringen fortfarande att skapa en referens för det. Du måste ändra manuellt mappningen till sin råa form snarare än den är associerad mappning av OneToMany, ManyToOne eller ManyToMany.

Annotation Mapping Från 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;
}

Till

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

Glöm sedan inte att använda doctrine orm:validate-schema för att säkerställa att mappningarna är synkroniserade.



  1. MySQL-anslutning över SSH-tunnel - hur specificerar man annan MySQL-server?

  2. Vad är databasen, varför databas?

  3. Behörighet nekades vid försök att importera en CSV-fil från PGAdmin

  4. Väljer första raden per grupp