hook_schema ()에서 mysql 날짜 또는 날짜 시간 필드를 올바르게 구현하는 방법은 무엇입니까?


13

데이터베이스에 테이블을 만들기 위해 스키마 정의가 포함 된 mymodule.install 파일을 작성했습니다. 이 테이블에는 두 개의 데이터 필드가 있습니다. 이 필드는 특정 컨텐츠를 채울 때 사용자가 채 웁니다 (예 : 뉴스의 특정 게시 날짜). 이제 날짜 제공 모듈을 의도적으로 사용하지 않았기 때문에 다른 이유로 데이터베이스 테이블의 두 필드가 동일한 행에 있어야했습니다.

hook_schema는 다음과 같이 두 필드를 정의합니다.

'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,
  ),

테이블은 데이터베이스에서 올바르게 작성되지만 항상 조언 메시지가 표시됩니다.

news_board.pubblish_date 필드 : mysql 유형 datetime에 대한 스키마 유형이 없습니다. news_board.unpublish_date 필드 : mysql 유형 datetime에 대한 스키마 유형이 없습니다. news_board.pubblish_date : 스키마 유형 : normal에 대한 유형이 없습니다. news_board.pubblish_date 필드 : 유형에 대한 스키마 유형이 없습니다. news_board.unpublish_date : 스키마 유형 : normal에 대한 유형이 없습니다. news_board.unpublish_date 필드 : 유형에 대한 스키마 유형이 없습니다.

mysql 데이터베이스에 날짜 시간 형식을 저장하기 위해 mysql_type 사양을 사용하도록 문서에서 빨간색을 유발하는 것이 이상하게 보입니다.

Drupal은 기본 타임 스탬프를 지원하며 다른 날짜 형식을 저장하려면 yuo가 사용하는 데이터베이스에 따라 mysql_type 또는 pgsql_type과 같은 특정 정의를 사용해야합니다.

토론에서 온라인으로 많은 사람들이 mysql_type 정의를 사용하고 문제를 해결 한 것을 보았는데 왜 효과가 없습니까?

고마워

답변:


12

varchar데이터베이스가 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,
),

그러나 표시되는 메시지는 스키마 모듈 에서 온 것입니다 . 이 문제는 이미 문제 # 468644 로 기록되었습니다 .

스키마에서 mysql datetime을 구현하는 것이 좋습니다. 이러한 메시지는 무시해도됩니다. 이러한 "조언 메시지"는 스키마 모듈의 버그로 인해 발생한다고합니다.


안녕하세요 Gisle, 답변 주셔서 감사합니다. 방금 제안한 수정을 수행 한 것입니다. 예, 데이터베이스에 테이블을 생성하지만 여전히이 문제가 있습니다. •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

예, 알고 있습니다. 사용하지 않도록 설정하고 제거했지만 결과는 동일합니다. 내가 사용하는 핵심 버전은 7.22입니다. 스키마 모듈도 설치하도록 지정하고 싶습니다. 언급 한 조언은이 모듈로 데이터베이스의 스키마를 검사하려고 할 때 나타납니다. 솔직히 나는 그들이 관리 인터페이스의 다른 부분에도 적용되는지 확인하려고하지 않았습니다. 이 시점 에서이 메시지를 무시하고 모듈을 계속 빌드 할 수 있는지 궁금합니다. 이것이 모듈 자체의 기능에 영향을 미치는지 모르겠습니다.
Marco

좋아, 시간 내 주셔서 감사합니다 Gisle, 당신은 내 많은 것을 저장했습니다!
Marco

0

공식적으로 지원되는 유형 목록에 포함되지 않은 레코드 유형을 사용해야하는 경우 각 데이터베이스 백엔드에 대한 유형을 지정할 수 있습니다.

이 경우 type 매개 변수를 제외 할 수 있지만 스키마가 형식이 지정되지 않은 백엔드에로드되지 않는 것이 좋습니다. 가능한 해결책은 "텍스트"유형을 폴백으로 사용하는 것입니다. ( 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', )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.