2011-11-05 36 views
6

Tôi sử dụng trình quản lý doctrine2 để tạo cơ sở dữ liệu innoDB (mysql) của mình. Làm cách nào để đặt giá trị ban đầu của id auto_incremented của tôi bằng cách sử dụng chú thích php?Cách đặt giá trị auto_increment ban đầu bằng doctrine2

Đây là cách tôi đã lập mô hình id của loại thực thể của tôi tại thời điểm này.

/** 
* @var integer $_id 
* 
* @Column(name="id", type="integer", nullable=false) 
* @Id 
* @GeneratedValue(strategy="IDENTITY") 
*/ 
private $_id; 

Tôi tìm thấy mã sau trong tài liệu nhưng có vẻ như nó sẽ sử dụng bảng riêng để tạo id.

/** 
* @Id 
* @GeneratedValue(strategy="SEQUENCE") 
* @Column(type="integer") 
* @SequenceGenerator(sequenceName="tablename_seq", initialValue=1, allocationSize=100) 
*/ 

Trả lời

2

Bạn có thể đặt chiến lược = "KHÔNG" và đặt ID cuối cùng trong hàm @prepersist. Dễ dàng hơn là chỉ cần thêm một "ALTER TABLE một cái gì đó AUTO_INCREMENT = 100;" trong một di chuyển DataFixture hoặc DB. Nó không phải là SQL di động nhưng nó thực hiện công việc mà không cần thêm sự phức tạp vào thực thể của bạn.

+1

làm thế nào bạn sẽ thiết lập các id trong hàm prepersist? –

+0

Nhận +1 cao nhất trong danh sách người đăng ký, nhưng thực hiện điều đó với sự kiện – tvlooy

+0

còn về điều kiện chủng tộc thì sao? Tôi nghĩ rằng theo lời khuyên của bạn, nó phải được thực hiện với một giao dịch, và nếu nhiều thực thể được tạo ra trong một lần (ví dụ trong kịch bản cài đặt), tôi nghĩ bạn sẽ gặp phải vấn đề? –

1

không thực sự rõ ràng từ các tài liệu, nhưng các nguồn tin cho biết ...

doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:  if (isset($options['auto_increment'])) { 
doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:   $tableOptions[] = sprintf('AUTO_INCREMENT = %s', $options['auto_increment']); 

như vậy cho mysql hoạt động như lựa chọn cho chú thích @table

* @ORM\Table(name="xxx", options={"auto_increment": 100}) 
+1

[Trước đây bạn đã đăng câu trả lời chính xác này cho một câu hỏi khác] (https://stackoverflow.com/questions/31867992/doctrine- auto-increment-starting-value-orm-generatedvalue/45599115 # 45599115). Vui lòng không đăng câu trả lời giống hệt nhau cho nhiều câu hỏi. Chọn câu hỏi hay nhất và đăng một câu trả lời hay ở đó và sau đó gắn cờ để đóng (các) câu hỏi khác dưới dạng bản sao. Nếu các câu hỏi không trùng lặp, bạn phải [* điều chỉnh câu trả lời cho từng câu hỏi cụ thể *] (http://meta.stackexchange.com/q/104227/311792). –

Các vấn đề liên quan