Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

lewati tabel saat menjalankan pemetaan konversi Doctrine

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @Column(unique=true) sepertinya tidak berfungsi

  2. Bagaimana Anda mencegah injeksi SQL di aplikasi LAMP?

  3. ID Sisipan Terakhir MySql, Konektor .net

  4. Kunci Utama MySQL

  5. Permintaan bergabung dengan catatan yang hilang