2013-08-01 14 views
23

Tôi muốn thêm một index vào cột bảng trong cơ sở dữ liệu MySQL của tôi. Tôi đang sử dụng Doctrine 2 để tạo các lược đồ cơ sở dữ liệu của mình.Làm cách nào để thêm một INDEX với Doctrine 2 vào một cột mà không làm cho nó trở thành khóa chính?

tôi biết rằng tôi có thể sử dụng

/** @Id @Column(type="integer") */ 

để tạo khóa chính. Nhưng cột của tôi sẽ không có thuộc tính unique hoặc thuộc tính primary key. Nó sẽ chỉ đơn giản là một index trong bảng của tôi (MySQL biết ba loại).

Tuyên bố thích hợp để tạo chỉ mục như vậy là gì?

+0

thấy các câu hỏi trước đây http://stackoverflow.com/questions/8141309/doctrine-2-with-multiple-indexes – jaczes

Trả lời

41

Nếu bạn muốn làm việc với học thuyết một bảng phải có một khóa chính, xem: http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html#identifiers-primary-keys

Để tạo một chỉ số: http://docs.doctrine-project.org/en/latest/reference/annotations-reference.html#annref-index

<?php 
/** 
* @Entity 
* @Table(name="ecommerce_products",indexes={@Index(name="search_idx", columns={"name", "email"})}) 
*/ 
class ECommerceProduct 
{ 
} 

Lưu ý rằng đây chỉ được sử dụng nếu bạn tạo ra lược đồ từ mã php của bạn. Vì vậy, trong trường hợp bảng của bạn đã tồn tại, bạn cũng có thể chỉ cần thêm một chỉ mục cho mình.

+0

Vâng, cảm ơn, đó chính xác là những gì tôi đang tìm kiếm. Tôi biết rằng tôi phải sử dụng và thực hành tốt để sử dụng các khóa chính. Nhưng tôi cần các cột khác (những người khác nhưng 'id' mà tôi muốn đặt chỉ mục trên). –

+3

sẽ tốt hơn nếu bạn có thể cung cấp câu trả lời thực tế ở đây thay vì liên kết –

19

Khi bạn sử dụng học thuyết và orm:

@ORM\Table(indexes={@ORM\Index(name="name_idx", columns={"name"})}) 
1

Nếu bạn đang sử dụng Symfony với giáo lý, bạn cũng sẽ cần phải use lớp Index để các chú thích để hoạt động đúng use Doctrine\ORM\Mapping\Index;

+0

Hầu hết mọi người thêm 'sử dụng Doctrine \ ORM \ Mapping làm ORM;' sau đó '@ORM \ Index (...)' – gingerCodeNinja