Symfony form (P3)
Symfony Form (P3) Phần 2 bạn có thể đọc tại đây https://viblo.asia/cuongnv_540/posts/NPVMaxLVRQOk Sử dụng doctrine migrations version để quản lý databases Một vấn đề thường gặp phải trong việc phát triển web đó là làm sao để quản lý việc thay đổi database của bạn. Việc quản lý thay đổi ...
Symfony Form (P3)
Phần 2 bạn có thể đọc tại đây
https://viblo.asia/cuongnv_540/posts/NPVMaxLVRQOk
Sử dụng doctrine migrations version để quản lý databases
-
Một vấn đề thường gặp phải trong việc phát triển web đó là làm sao để quản lý việc thay đổi database của bạn. Việc quản lý thay đổi này được hỗ trợ trong Doctrine qua các version migrations. Nó cung cấp đầy đủ các công cụ cần thiết nhằm giải quyết vấn đề này.
-
Đầu tiên ta hãy coi database hiện tại là nên tảng cho database của project hiện tại
Các bước tạo Migrations
B1. Chạy lệnh sau để generate migration trong database.
Như trong trường hợp của tôi ta có :
- Lỗi tôi nhận được ở trên là do trong database của tôi chẳng khác gì so với trên schema.yml nên Doctrine không thể tạo ra file migrations mới. Các bạn không cần lo lắng nếu có lỗi này.
- Để tránh các lỗi không mong muốn xảy ra tôi khuyên bạn không nên sửa chữa gì file schema trước khi tạo migration cho project. Hãy để cho cấu trúc db giống với những gì được khai báo trong schema.yml. Để sau khi set up thành công migrations cho db thì các sửa chữa của bạn sẽ thành 1 version của migrations.
B2. generate migrations cho model
Lúc này thì thư mục lib/migration sẽ được tạo ra
- Lưu ý vì đây là phiên bản đầu tiên của migration nên các file migration không có tên version đi kèm .
B3. drop database cũ và tạo db mới dựa trên các file migrations
-
Chú ý có sự khác nhau giữa việc tạo file dựa trên migrations . Như ở bài 1 thì việc tạo db dựa vào file schema. Còn ở đây là tạo db dựa vào file migration. Sau này nếu schema thay đổi thì ứng với mỗi lần thay đổi schema sẽ tạo ra 1 version migration mới.
-
Chạy tập lệnh sau
- Kết quả thu được :
- Kết quả trong database:
- Như vậy ta đã hoàn thành việc sử dụng Doctrine migrations để quản lý version db.
Embed 1 form vào 1 form khác
-
Trở lại với chủ để symfony form của tôi. Trong bài này tôi sẽ giới thiệu với các bạn việc nhúng 1 form vào 1 form khác.
-
Trong symfony thì 1 form là đại diện của một object nào đó. Nhưng trong thực tế thì 1 trang bạn có thể phải hiển thị thông tin của nhiều object chứ không chỉ 1. Vậy nếu một trang yêu cầu sửa thông tin của 2 hay nhiều object bạn sẽ phải khai báo lần lược các form rồi sử lý việc lưu dữ liệu của các form đó 1 cách riêng rẽ.
-
Trong symfony bạn có thể làm việc này bằng cách lựa chọn một form cho 1 object nào đó rồi sau đó nhúng form của các object còn lại vào. Nói nôm na là một form có thêm các thuộc tính mà các thuộc tính này là một form của object khác.
- Sửa lại database
- Để làm việc này tôi sẽ đưa ra một ví dụ.
-
Đây là thông tin hiển thị của 1 job. Bây giờ phát sinh yêu cầu là thêm một số thông tin bổ sung cho job nay. 1 job có thể có 1 hay nhiều thông tin bổ sung.
-
Vì vậy ta phải thêm một bảng để chứa thông tin bổ sung cho job.
-
Thêm vào schema.yml một bảng mới ExtendedJobInformation có nội dung như trên.
-
Để tạo migration từ thay đổi trên ta làm như sau
-
Đầu tiên tạo file migration từ thay đổi của schema.yml
- 2 file mới được tạo ra ứng với sự thay đổi schema
- Chạy file migration để update db lên version mới nhất
- Bước cuối: Cập nhật lại form, filters, model cho giống với sự thay đổi tương ứng của db
- Như vậy ta đã hoàn thành việc thêm 1 table mới vào db.