2011-01-25 13 views
5

Xin chào. Tôi đang gặp khó khăn trong việc di chuyển các thay đổi mà tôi đã thực hiện i tệp config/doctrine/schema.yml của mình.Sử dụng mô hình và di chuyển tốt hơn trong symfony

Tôi đã thêm cột age vào bảng user. Sau đó, tôi đã thực hiện một số php symfony doctrine:generate-migrations-diff, tiếp theo là php symfony doctrine:migrate.

Tìm trong cơ sở dữ liệu của tôi, cột age hiện được thêm vào mà không xóa bất kỳ dữ liệu nào.

Nhưng, /lib/model/doctrine/base/BaseUser.class.php của tôi không thay đổi, không có trường age hoặc chức năng cho age. Vì vậy, tôi cũng đã làm lệnh php symfony doctrine:build-model. Cuối cùng, mô hình cũng được cập nhật/di chuyển.

Vì vậy, tôi tự hỏi, đây có phải là cách duy nhất không? Có vẻ như rất nhiều công việc, và tôi sợ bỏ lỡ điều gì đó mỗi khi làm việc đó.

Tôi có thể truy cập ngay vào phpmyadmin, thêm thay đổi trong cơ sở dữ liệu ở đó và chỉ cần thực hiện một số php symfony doctrine:build-schema và giống như bỏ qua phần di chuyển (hai lệnh).

Ngoài ra khi nói đến việc sử dụng các mô hình, tôi có đúng /lib/model/doctrine/User.class.php là nơi tôi có thể thực hiện các chức năng và cho Lớp người dùng "dữ liệu" của tôi không? Giống như, tạo một hàm isFemale. Nếu không, thì loại chức năng đó sẽ ở đâu?

Đây có thể là câu hỏi không đúng, nhưng tại sao lại là lớp mô hình bên trong đường dẫn/lib/doctrine? Theo như tôi đã học được, bạn giữ mô-đun bên trong ứng dụng, nơi bạn tạo chế độ xem và bộ điều khiển của mình. Tại sao mô hình nên ở bên ngoài. Như thế này tôi có thể làm cho các mô hình mà không có bộ điều khiển kèm theo và xem?

Cảm ơn.

Trả lời

8

Tại sao mô hình cần được bên ngoài

Bởi vì mô hình có thể được sử dụng ở khắp mọi nơi trong dự án của bạn, trong ví dụ, trong các ứng dụng khác nhau và mô-đun.

Tôi có thể truy cập ngay vào phpmyadmin, thêm thay đổi trong cơ sở dữ liệu ở đó và chỉ cần thực hiện một học thuyết symfony: build-schema và giống như bỏ qua phần di chuyển (hai lệnh).

Tất nhiên bạn có thể, nhưng di chuyển là cách tiếp cận tốt để theo dõi lược đồ khi triển khai sản xuất hoặc làm việc theo nhóm.

đây làm thế nào tôi sử dụng sự di cư của học thuyết (use-case đơn giản):

  1. Thêm một cột age để mô hình User tôi trong schema.yml
  2. ./symfony doctrine:generate-migrations-diff. Lớp di chuyển (-es) đã được tạo.
  3. ./symfony doctrine:migrate. Đã thêm thành công cột age vào bảng.
  4. ./symfony doctrine:build --all-classes. Tạo biểu mẫu/bộ lọc/mô hình

Vậy đó.Ý tưởng chính là doctrine:generate-migrations-diff lớp:

  1. Thu thập thông tin về tất cả các cấu trúc mô hình của bạn (php-đại diện của schema.yml)
  2. So sánh của bạn thông tin schema.yml và từ (1)
  3. Tạo lớp di dân dựa trên chênh lệch

Ngoài ra khi nói đến sử dụng các mô hình, tôi phải rằng /lib/model/doctrine/User.class.php là nơi tôi có thể làm cho chức năng và như vậy cho người dùng của tôi "lớp dữ liệu" ? Giống như, tạo một hàm làFemale. Nếu không, thì loại chức năng đó sẽ ở đâu?

Có, bạn có thể thêm phương thức đó vào mô hình User vì đó là về người dùng.

+1

+1 cho câu trả lời hay và được giải thích –

+0

Bây giờ tôi vừa gặp lỗi, không thể tạo ra các lớp di trú từ sự khác biệt. Không có lỗi nào khác hơn: ( – Johannes

+1

Johannes, điều đó có nghĩa là lược đồ và mô hình được đồng bộ hóa. Hãy nhớ không xây dựng mô hình cho đến khi bạn tạo di chuyển. – Darmen