hellósztok
egy olyan problémám lenne, hogy létrehoztam egy modult, és az install fájljában csinálok néhány adatbázis táblát, amikbe kéne dátum formátumú oszlop, de ha létre akarom hozni hibát jelez, hogy nem tudja létrehozni a táblát. Így próbálom megoldani:
'datum' => array(
'type' => 'date',
'not null' => TRUE,
'default' => ''),
egy leírásban azt olvastam, hogy datetime típust létre lehet hozni, de date-ől nem írnak, ezért érdekelne, hogy létre lehet egyáltalán hozni így dátumoszlopot, vagy csak datetime-ot? és ha csak datetime-ot, akkor azt lehet kezelni csak dátumként, vagyis lehet bele tölteni csak dátumot idő megadása nélkül, és lehet kiolvasni belőle csak a dátumrészt? és ha igen, akkor hogyan?
Előre is kösz minden segítséget.
nem lehet
A Schema API miatt 6.x-ben nem lehet DATE típusú mezőt létrehozni, de 7.x-ben már igen. Használhatsz helyette DATETIME típust, vagy INT-et TIMESTAMP tárolásra. Ha még nem nézted, a Date modul és a Date API sokat segíthet. A DATETIME jó nem teljes dátumok tárolására is.
akkor maradok a datetime-nál
akkor maradok a datetime-nál, de így sem akar működni. ezt használom:
'datum' => array(
'type' => 'datetime',
'not null' => TRUE,
'default' => ''),
és ezt az üzenetet válaszolja és nem hozza létre a táblákat:
user warning: Invalid default value for 'datum' query: CREATE TABLE foglal_reg ( `uid` INT unsigned NOT NULL DEFAULT 0, `datum` DATETIME NOT NULL DEFAULT '', `tartam` INT unsigned NOT NULL DEFAULT 0, `allapot` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (reg_fog_id) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ in C:\wamp\www\honlap\includes\database.inc on line 529.
ilyenkor mi lehet a probléma? és ha nincs megoldás, akkor az INT-es TIMESTAMP tárolás milyen módszer? hogyan működik? bonyolultabb vagy könnyű átkonvertálni INT-é egy dátumot?
""
Hello!
A default-nál nem lehagysz egy "-öt? Nekem ez teljesen jól megy: 'date' => array('type' => 'datetime', 'not null' => FALSE),
az nem " hanem két ' :)
az nem " hanem két ' :)
angol
Azt jelenti, hogy a meződ alapértelmezett értéke nem megfelelő, jelen esetben konkrétan üres. Ha a mező NOT NULL = TRUE; akkor állíts be neki valamit, vagy legyen NOT NULL = FALSE;
aha, értem, akkor átalakítom
aha, értem, akkor átalakítom:
'datum' => array(
'type' => 'date',
'not null' => FALSE),
vagy default értéket hogyan adhatok meg neki? ha beírok mondjuk 1-et akkor 1900-01-01 00:01-nek érzékeli? vagy valamilyen formában kell beírni a dátumot? (sajnos ennek a szintaktikájában nem vok otthon :( ), és kötelező időt is megadni, vagy dátum elég?
bocs, hogy ennyit bénázok, csak még bele kell jönnöm :)
inkább int típust használj
A Drupal int típust használ, és a dátumokat timestampként tárolja.
A timestamp azért jó, mert könnyű vele számolni, és kiíráskor alakíthatod a Drupal admin felületén beállított formátumok szerint, pl:
format_date($timestamp, "small"))
--
Csonka Gergely
http://cheppers.com