sql >> Databáze >  >> RDS >> Mysql

přeskočit tabulky při spuštění Doctrine convert-mapping

Hlavním problémem převodu a ověřování Doctrine je to, že standardně čte celou databázi a všechny tabulky, bez ohledu na to, zda entity nebo mapování pro ně existují nebo ne. I při použití --filter="" příznak při volání orm:convert:mapping nebo orm:generate:entities

Chcete-li tento problém obejít a nechat Doctrine přeskakovat tabulky, které vyvolávají výjimky, můžete Doctrine nastavit tak, aby četl pouze tabulky, které chcete, a to tak, že je definujete pomocí 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);

NEBO můžete nastavit filtr pro připojení stávajícího správce entit.

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

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

Je pravda, že toto není způsob, jak říci doktríně, aby ignorovala výjimky, ale měla by vám pomoci začít s učením se na existující aplikaci na některých konkrétních tabulkách místo na celé databázi.

Jako vedlejší poznámku, protože jste zmínil, že máte tabulky odkazů. Pokud máte v tabulkách cizí klíče, které nezahrnujete do filtru, převod --z-databáze na ně přesto vytvoří referenci. Budete muset ručně změnit mapování na jeho nezpracovanou formu, spíše než na související mapování OneToMany, ManyToOne nebo ManyToMany.

Mapování anotací z 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;
}

Komu

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

Pak nezapomeňte použít doctrine orm:validate-schema abyste zajistili, že jsou mapování synchronizovaná.



  1. Vytvoření výpisu databáze pro konkrétní tabulky a položky Postgres

  2. Jak získat všechny možné kombinace řádků ze dvou tabulek v SQL

  3. Jak UPDATE a SELECT zároveň

  4. Získejte prvních n záznamů pro každou skupinu seskupených výsledků