Es scheint, dass der Spaltendatentyp TIME
( nicht datetime
nur die Tageszeit12:00
) in nicht unterstützt wird Magento 2
.
Ich muss eine Tageszeit speichern, wie kann ich das umgehen?
Wie soll ich mit den verfügbaren Tools und Datentypen vorgehen?
Ich dachte darüber nach, ein normales, aber unverwechselbares Datum zu speichern (wie 1970-01-01 12:00:00
es unverwechselbar genug ist, um niemanden zu verwirren, der die Daten durchsucht) und nur den Zeitteil daraus zu extrahieren UI
, aber es ist schrecklich und lässt mich innerlich zusammenzucken.
Gibt es einen eleganteren Weg?
magento2
database
install-script
time
Kampaviineri
quelle
quelle
Magento\Framework\DB\Ddl\Table
mit meinen eigenen Ergänzungen zu überschreiben und zu erweitern und b)Magento\Framework\DB\Ddl\Table
direkt zu bearbeiten , aber das hat nicht geholfen (alle Arten von Fehlern beim Setup: Upgrade). Könnten Sie genauer sagen, was Sie unter Erstellen eines TIME-Formats verstehen? Zend db sollte den Zeitdatentyp unterstützen, aber 1. das Bearbeiten und Hinzufügen des Spaltentyps 'TIME' in der Klasse Magento \ Framework \ DB \ Ddl \ Table 2. das Aufrufen von Table-> addColumn mit dem Typ 'TIME' und einer beliebigen Kombination von Optionen verursacht nur[Zend_Db_Exception] Invalid column definition data
Antworten:
Ich habe dies zunächst mit DATETIME gelöst
`
und dann einfach mit Raw SQL-Ausführung mit
$installer->run('ALTER TABLE MYTABLE MODIFY MYCOLUMN TIME');
Und das war es, Problem gelöst.
quelle
Magento ORM implementiert keine exotischen Datumstypen. Sie haben zwei Möglichkeiten:
Schreiben Sie jede einzelne DDL-Klasse in Magento 2.0 Framework neu und verursachen Sie Kopfschmerzen, um sie bei jeder neuen Version von Magento 2.0 beizubehalten, da sie möglicherweise beschädigt wird.
Verwenden Sie einen anderen verfügbaren Datentyp, nicht unbedingt einen datumsbezogenen, da dies zu Leistungseinbußen führen kann. Sie können versuchen, INT zu verwenden, bei dem es sich nur um eine Darstellung der Zeit handelt. Dann wird beispielsweise ein
10:11:43
solcher Wert in einer Ganzzahlspalte dargestellt101143
. Und Sie können immer noch die gleichen Operationen auf MySQL Ebene tun , wie mit regulärerTIME
Zeit (BETWEEN
,<
,>
, usw.). Es gibt keine Leistungseinbußen bei der Verwendung von int anstelle von Zeit. (Ich empfehle keineVARCHAR
Darstellung, da die Suche über den Index langsamer ist.)quelle
Wenn ich ehrlich sein müsste: Mach es 'The Magento Way ™'. Auf diese Weise treten am seltensten Kopfschmerzen mit Vorwärtskompatibilität auf. Ich weiß, ich würde gerne auch einen
TIME
Typ sehen, aber wenn Magento nur unterstütztDATETIME
(höchstwahrscheinlich aufgrund der Abstraktion der Datenquelle), verwenden Sie diesen stattdessen, auch wenn Sie dadurch zusammenzucken.Wer weiß ... vielleicht könnte Magento eines Tages entscheiden, dass Version 2.x eine neuere, schnellere Datenbank unterstützt, die nicht unterstützt wird
TIME
. Das Umschreiben Ihrer DDLs (oder das sofortige Ändern Ihrer Rohdaten-Tabellen) kann dann einige böse Nebenwirkungen haben.quelle