Mysql tarih veya datetime alanı doğru hook_schema () içinde nasıl uygulanır?


13

Veritabanımda bir tablo oluşturmak için bir şema tanımı içeren bir mymodule.install dosyası yazdım. Bu tablo iki veri alanı içerir. Bu alanlar, belirli bir içeriği doldurduklarında kullanıcılar tarafından doldurulur (örnek: bir haberin yayınlanma tarihini belirtmek için). Şimdi bilerek katkıda bulunan tarih modülünü kullanmadım, çünkü bu iki alanın başka nedenlerle veritabanı tablosunda aynı satırda olması gerekir.

Hook_schema iki alanı şu şekilde tanımlar:

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

Tablo veritabanında doğru oluşturulur, ancak her zaman theese tavsiye mesajları alıyorum:

News_board.pubblish_date alanı: mysql türü datetime için Şema türü yok. News_board.unpublish_date alanı: mysql türü datetime için Şema türü yok. news_board.pubblish_date: Şema türü için tür yok: normal. News_board.pubblish_date alanı: tür için Şema türü yok. news_board.unpublish_date: Şema türü için tür yok: normal. News_board.unpublish_date alanı: tür için Şema türü yok.

Bana garip görünüyor ben mysql veritabanında datetime biçimini saklamak için mysql_type belirtimi kullanmak için belgelerde kırmızı neden olur.

Drupal'ın yerel zaman damgalarını desteklediğini ve farklı bir tarih biçimini saklamak istiyorsanız, yuo'nun kullandığınız veritabanına göre mysql_type veya pgsql_type gibi belirli tanımları kullanmanız gerektiğini biliyorum.

Tartışmalarda çevrimiçi birçok insanın mysql_type tanımını kullandığını gördüm ve gördüklerimden sorunu çözdüler, neden benim için çalışmıyor?

Çok teşekkürler.

Yanıtlar:


12

varcharVeritabanının mysql olmaması durumunda bir yedek tür ( ) sağlamalısınız .

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

Ancak, gördüğünüz iletiler Şema modülünden gelir. Bu sorun zaten sorun # 468644 olarak kaydedildi .

Mysql datetime uygulamasının şemanıza uygulanması gayet iyi. Bu mesajları güvenle yok sayabilirsiniz. Bu "tavsiye mesajlarına" Schema modülündeki bir hatadan kaynaklandığını söyleyebilirim.


Merhaba Gisle, cevap için teşekkürler. Ben sadece önerilen değişiklik yaptım ve evet, veritabanında tablo oluşturur ama hala bu tavsiye var: •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

Evet biliyorum, devre dışı bıraktım ve kaldırdım ama sonuç aynı. Kullandığım çekirdek sürüm 7.22. Şema modülünün de yüklü olduğunu belirtmek istiyorum. Bahsedilen tavsiyeler, bu modülle veritabanının şemasını incelemeye çalıştığımda belirir. Dürüst olmak gerekirse ben de yönetici arayüzünün diğer bölümünde appese olup olmadığını kontrol etmek için deneyin vermedi. Ben de bu noktada bu mesajları görmezden gelebilir miyim merak ediyorum ve modül inşa etmeye devam. Bunun modülün işlevselliğini etkileyip etkilemeyeceğini bilmiyorum.
Marco

Tamam, zaman ayırdığınız için çok teşekkür ederim Gisle, çok şey kurtardın!
Marco

0

Resmi olarak desteklenen türler listesinde yer almayan bir kayıt türü kullanmanız gerekiyorsa, her veritabanı arka ucu için bir tür belirtebilirsiniz.

Bu durumda, type parametresini dışarıda bırakabilirsiniz, ancak şemanızın, belirtilen bir türü olmayan arka uçlara yüklenemeyeceğini unutmayın. Olası bir çözüm, "metin" türünü yedek olarak kullanmak olabilir. ( 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', )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.