Lỗi Doctrine TimeStamp: Nhập các bảng SQL Server 2008
Đại lý web » Tin tức kỹ thuật số » Lỗi Doctrine TimeStamp: Nhập các bảng SQL Server 2008

Lỗi Doctrine TimeStamp: Nhập các bảng SQL Server 2008

Cách nhập bảng SQL Server có trường Dấu thời gian với Học thuyết? Khi các hướng dẫn ở đây và ở đó không đủ, thường chỉ có một cách để đạt được mục đích của bạn... Nhận được tay của bạn bẩn! Hôm nay tôi đề xuất một giải pháp mà tôi hy vọng sẽ nhanh chóng được Cộng đồng phụ trách phát triển Doctrine tích hợp, cho phép tạo các thực thể Symfony2 từ cơ sở dữ liệu SQL Server chứa trường loại Dấu thời gian.

Loại Dấu thời gian là gì?

Tôi thấy cần phải chỉ định một số thông tin nhỏ về loại Dấu thời gian. Tôi không phải là chuyên gia về MySQL, nhưng từ thông tin tôi đã xem, Dấu thời gian của MySQL trông giống như một ngày, giúp chuyển đổi dễ dàng hơn. Tuy nhiên, cùng một loại cho SQL Server thì tinh tế hơn một chút theo cách hiểu của nó. Tài liệu có sẵn trên Microsoft Technet.

Một kiểu dữ liệu hiển thị các số nhị phân có một ký tự được tạo tự động trong cơ sở dữ liệu.
Thật thú vị… Và làm cách nào để bảo Doctrine không chuyển đổi tôi? Tôi đề xuất một giải pháp để chuyển hướng vấn đề ...

Tìm một giải pháp “tùy chỉnh”

Tôi đã có thể thấy các thông báo đến cho tôi biết rằng đã có một phương pháp làm sẵn hoạt động. OUI! Hơn nữa, tác vụ Symfony2 này có thể được gọi theo cách này:

học thuyết ứng dụng/bảng điều khiển php: ánh xạ: nhập
Tác vụ này hoạt động tốt, nhưng khi tôi đọc ở đây, Doctrine hoạt động với khoảng 70-80% ánh xạ có thể có trên cơ sở dữ liệu. Trong trường hợp của tôi, tôi muốn xuất ánh xạ của bảng SQL Server (2008), chứa trường Dấu thời gian nổi tiếng. Và trong 20% ​​ánh xạ còn lại, chính xác là các loại trường này.

Tôi sẽ chạy lệnh và cố gắng nhập mappaqe.

1
học thuyết ứng dụng/bảng điều khiển php: ánh xạ: nhập khẩu — buộc NamespaceNameBundle xml

Trong trường hợp của tôi, tôi phải sử dụng hai tùy chọn bổ sung, đó là:

  1. –em=”…” để chỉ địnhNgười quản lý thực thể phụ trách cơ sở dữ liệu SQL Server của tôi;
  2. --filter=”bảng”. Tôi muốn sử dụng tùy chọn này đã hoạt động với MariaDB nhưng dường như bị bỏ qua khi được sử dụng với MSSQL. Điều này cho phép bạn chỉ định một bảng để xuất. Trong trường hợp của tôi, tôi đã sao chép BDD của mình, tôi đã xóa các bảng mà tôi không quan tâm và tạo một hồ sơ mới vềNgười quản lý thực thể.
    Và đây là ngoại lệ được nêu ra:
1
2
[Học thuyếtDBALDBALException]
cơ sở dữ liệu không xác định kiểu dấu thời gian được yêu cầu, DoctrineDBALPlatformsSQLServer2008Platform có thể không hỗ trợ nó.

Từ giờ trở đi, chúng ta sẽ phải gieo xúc xắc.
Loại Dấu thời gian không được hỗ trợ - và tôi thừa nhận rằng tôi thực sự không biết loại trường PHP nào để liên kết với nó - chúng tôi sẽ tạm thời thông báo cho Doctrine rằng loại này phải được chuyển đổi ngày giờ.

  • Chuyển đến thư mục được chỉ định bởi cấu trúc cây, nhà cung cấpdoctrinedbalibDoctrineDBALPlatforms.
  • Trong thư mục này là các lớp hỗ trợ phần lớn DBMS hiện có.
  • Trong trường hợp của tôi, tôi đang làm việc trên SQL Server 2008 R2, vì vậy tôi chỉnh sửa tệp SQLServer2008Platform.php, nhưng vui lòng chỉnh sửa tệp khác nếu tệp phù hợp với cấu hình của bạn.
  • Chúng tôi sẽ chỉnh sửa phương pháp khởi tạoDoctrineTypeMappings. trong biến học thuyếtTypeMapping là trình bày thông tin để chuyển đổi các loại. Thêm dòng:
    $this->doctrineTypeMapping['timestamp'] = 'datetime';
  • Bắt đầu lại nhập bản đồ. Ánh xạ của tất cả các trường đã được nhập.
  • Bạn phải nhớ xóa dòng bạn đã thêm vào tệp. Nếu bạn không chắc chắn, hãy xóa tất cả các nhà cung cấp và cài đặt lại chúng.
  • Bây giờ hãy lần lượt đến các tệp đã được tạo. Đường dẫn của từng cái được chỉ định và lần lượt làm theo các chỉ dẫn bên dưới.
    • Bây giờ bạn có các bảng tương đương trong XML.
    • Xóa các dòng tương ứng với trường loại Dấu thời gian. Bằng cách này, Doctrine sẽ bỏ qua các trường này.
    • Một biện pháp phòng ngừa nhỏ với SQL Server là thêm dấu ngoặc quanh mỗi giá trị được chứa bởi "cột" có một hoặc nhiều khoảng trắng.
      Đối với dòng này,

      Cột Máy chủ SQL là "Thông tin của tôi". Doctrine không biết cách xử lý khoảng trắng với MSSQL. Vì vậy, bạn cần thêm móc như thế này:
  • Khi các tệp của bạn đã được sửa, chúng tôi sẽ bắt đầu tạo thực thể.
    1
    học thuyết ứng dụng/bảng điều khiển php: ánh xạ: chuyển đổi chú thích ./src

Bạn có thể cần chỉ định Trình quản lý thực thể để sử dụng, như sau: –em=”…”.

  • Giờ đây, bạn có thể xóa ánh xạ, tức là các tệp .xml có trong Tài nguyên.
    Vậy là xong, giờ bạn đã có các thực thể hợp lệ do Doctrine tạo ra. Giải pháp hơi… “brian fuck” này có giá trị chừng nào nhóm chịu trách nhiệm phát triển Doctrine chưa tích hợp một giải pháp khả thi cho phép loại TimeStamp được hỗ trợ nguyên bản trong PHP.

Chúc may mắn và hẹn gặp lại!

★ ★ ★ ★ ★