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.