Làm cách nào để triển khai trường mysql hoặc trường datetime chính xác trong hook_schema ()?


13

Tôi đã viết một tệp mymodule.install chứa định nghĩa lược đồ để tạo bảng trong cơ sở dữ liệu của tôi. Bảng này chứa hai trường dữ liệu. Các trường này sẽ được người dùng điền vào khi họ sẽ điền vào nội dung cụ thể (ví dụ: để chỉ định ngày xuất bản cho một tin tức). Bây giờ tôi không sử dụng mô-đun Ngày đóng góp vào mục đích, vì tôi cần hai trường này nằm trên cùng một hàng trong bảng cơ sở dữ liệu vì những lý do khác.

Hook_schema định nghĩa hai trường theo cách này:

'pubblish_date' => array(
    'description' => t('The pubblish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),
  'unpublish_date' => array(
    'description' => t('The unpublish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),

Bảng được tạo chính xác trong cơ sở dữ liệu, nhưng tôi luôn nhận được thông báo lời khuyên:

Trường news_board.pubblish_date: không có loại Schema cho datetime kiểu mysql. Trường news_board.unpublish_date: không có loại Schema cho datetime kiểu mysql. news_board.pubblish_date: không có loại cho loại Schema: bình thường. Trường news_board.pubblish_date: không có loại Schema cho loại. news_board.unpublish_date: không có loại cho loại Schema: bình thường. Trường news_board.unpublish_date: không có loại Schema cho loại.

Có vẻ lạ đối với tôi vì tôi đỏ trên tài liệu để sử dụng đặc tả mysql_type để lưu trữ định dạng datetime trong cơ sở dữ liệu mysql.

Tôi biết rằng Drupal hỗ trợ các dấu thời gian nguyên bản và nếu bạn muốn lưu trữ một định dạng ngày khác, bạn phải sử dụng các định nghĩa cụ thể như mysql_type hoặc pssql_type theo cơ sở dữ liệu mà yuo đang sử dụng.

Trong các cuộc thảo luận tôi đã tìm thấy rất nhiều người sử dụng định nghĩa mysql_type và từ những gì tôi thấy họ đã giải quyết vấn đề, vậy tại sao nó không hiệu quả với tôi?

Cảm ơn rất nhiều.

Câu trả lời:


12

Bạn nên cung cấp một loại dự phòng ( varchar) cho trường hợp cơ sở dữ liệu không phải là mysql.

'pubblish_date' => array(
  'description' => t('The pubblish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),
'unpublish_date' => array(
  'description' => t('The unpublish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),

Tuy nhiên, các thông điệp bạn thấy đến từ mô-đun Schema . Vấn đề này đã được ghi nhận là sự cố # 468644 .

Việc thực hiện datetime mysql trong lược đồ của bạn là tốt. Bạn có thể yên tâm bỏ qua những tin nhắn này. Tôi muốn nói rằng những "thông điệp tư vấn" này là do lỗi trong mô-đun Schema.


Xin chào, cảm ơn bạn đã trả lời. Tôi vừa thực hiện sửa đổi mà bạn đề xuất và vâng, nó tạo bảng trong cơ sở dữ liệu nhưng tôi vẫn nhận được các tính năng này: •Field news_board.pubblish_date: no Schema type for mysql type datetime. •Field news_board.unpublish_date: no Schema type for mysql type datetime.
Marco

Có tôi biết, tôi đã vô hiệu hóa và gỡ cài đặt nó nhưng kết quả là như nhau. Phiên bản cốt lõi tôi đang sử dụng là 7.22. Tôi muốn xác định rằng tôi đã cài đặt mô-đun lược đồ. Các lời khuyên được đề cập xuất hiện khi tôi cố gắng kiểm tra lược đồ của cơ sở dữ liệu với mô-đun này. Thành thật mà nói tôi đã không thử kiểm tra xem họ có xuất hiện trong phần khác của giao diện quản trị hay không. Tôi cũng tự hỏi liệu tôi có thể bỏ qua tin nhắn này vào thời điểm này và tiếp tục xây dựng mô-đun. Tôi không biết nếu điều này sẽ ảnh hưởng đến chức năng của chính mô-đun.
Marco

OK, cảm ơn bạn rất nhiều vì thời gian của bạn Gogg, bạn đã tiết kiệm rất nhiều của tôi!
Marco

0

Nếu bạn cần sử dụng loại bản ghi không có trong danh sách loại được hỗ trợ chính thức, bạn có thể chỉ định loại cho mỗi phụ trợ cơ sở dữ liệu.

Trong trường hợp này, bạn có thể bỏ tham số loại, nhưng lưu ý rằng lược đồ của bạn sẽ không tải được vào các phụ trợ không có loại được chỉ định. Một giải pháp khả thi có thể là sử dụng loại "văn bản" làm dự phòng. ( https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/group/schemaapi/8.2.x )

'submit_date' => array( 'type' => 'varchar', 'mysql_type' => 'datet', )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.