Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

bỏ qua bảng khi chạy ánh xạ chuyển đổi Doctrine

Vấn đề chính với việc chuyển đổi và xác thực của Doctrine là nó đọc toàn bộ cơ sở dữ liệu và tất cả các bảng theo mặc định, bất kể Thực thể hoặc Ánh xạ cho chúng có tồn tại hay không. Ngay cả khi sử dụng --filter="" gắn cờ khi gọi orm:convert:mapping hoặc orm:generate:entities

Để khắc phục sự cố này và để các bảng bỏ qua Doctrine ném Ngoại lệ, bạn có thể đặt Doctrine chỉ đọc các bảng bạn muốn, bằng cách xác định chúng bằng 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);

HOẶC bạn có thể đặt bộ lọc cho kết nối của một trình quản lý Đối tượng hiện có.

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

Tham khảo: http://doctrine-orm.readthedocs.org/vi /latest/reference/configuration.html

Được cho rằng đây không phải là cách để bảo học thuyết bỏ qua các ngoại lệ, nhưng sẽ giúp bạn bắt đầu học trên một ứng dụng hiện có trên một số bảng cụ thể thay vì toàn bộ cơ sở dữ liệu.

Một lưu ý bên vì bạn đã đề cập rằng bạn có các bảng liên kết. Nếu bạn có khóa ngoại trong các bảng mà bạn không đưa vào bộ lọc, thì chuyển đổi --from-cơ sở dữ liệu sẽ vẫn tạo ra một tham chiếu cho nó. Bạn sẽ phải thay đổi theo cách thủ công ánh xạ tới dạng thô thay vì ánh xạ liên kết của OneToMany, ManyToOne hoặc ManyToMany.

Ánh xạ chú thích Từ 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;
}

Tới

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

Sau đó, đừng quên sử dụng doctrine orm:validate-schema để đảm bảo rằng các ánh xạ được đồng bộ hóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh hai phạm vi ngày trong cùng một bảng

  2. Chuỗi MySQL Chỉ mục cuối cùng của

  3. Đây có phải là một phương pháp an toàn để chèn dữ liệu biểu mẫu vào cơ sở dữ liệu MySQL không?

  4. MySQL - Độ phức tạp của:SELECT COUNT (*) FROM MyTable;

  5. Chỉ số PostgreSQL và Chỉ số InnoDB - Hiểu sự khác biệt