Masalah utama dengan konversi dan validasi Doctrine adalah ia membaca seluruh database dan semua tabel secara default, terlepas dari Entitas atau Pemetaan untuk mereka ada atau tidak. Bahkan saat menggunakan --filter=""
tandai saat memanggil orm:convert:mapping
atau orm:generate:entities
Untuk mengatasi masalah ini dan agar Doctrine melewati tabel yang memunculkan Pengecualian, Anda dapat mengatur Doctrine untuk hanya membaca tabel yang Anda inginkan, dengan mendefinisikannya dengan 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);
ATAU Anda dapat menyetel filter untuk koneksi pengelola Entitas yang ada.
$em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/');
Referensi:http://doctrine-orm.readthedocs.org/en /latest/reference/configuration.html
Memang ini bukan cara untuk memberitahu doktrin untuk mengabaikan pengecualian, tetapi akan membantu Anda untuk memulai mempelajari aplikasi yang ada pada beberapa tabel tertentu, bukan seluruh database.
Sebagai catatan tambahan karena Anda menyebutkan bahwa Anda memiliki tabel tautan. Jika Anda memiliki kunci asing dalam tabel yang tidak Anda sertakan dalam filter, konversi --from-database masih akan membuat referensi untuknya. Anda harus mengubahnya secara manual pemetaan ke bentuk mentahnya daripada pemetaan terkait OneToMany, ManyToOne, atau ManyToMany.
Pemetaan Anotasi Dari 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;
}
Untuk
/**
* @ORM\Entity
* @ORM\Table(name="order")
*/
class Order
{
/**
* @var integer
* @ORM\Column(name="customer", type="integer", nullable=true)
*/
private customer;
}
Kemudian jangan lupa untuk menggunakan doctrine orm:validate-schema
untuk memastikan bahwa pemetaan sinkron.