Magento 2-Datentypen. Brauche ZEIT (des Tages)

7

Es scheint, dass der Spaltendatentyp TIME( nicht datetimenur 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:00es 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?

Kampaviineri
quelle
Könnten Sie ein TIME-Format erstellen, wenn es noch nicht existiert?
Robbie Averill
@RobbieAverill hat versucht, a) die Klasse Magento\Framework\DB\Ddl\Tablemit 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
Kampaviineri

Antworten:

2

Ich habe dies zunächst mit DATETIME gelöst

$table = $installer->getConnection()
        ->newTable($installer->getTable('MYTABLE'))
        ->addColumn(
            'MYCOLUMN', 
            \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME, null,
           ['unsigned' => true, 'nullable' => true],
            'Comment about table'
        );

`

und dann einfach mit Raw SQL-Ausführung mit

$installer->run('ALTER TABLE MYTABLE MODIFY MYCOLUMN TIME');

Und das war es, Problem gelöst.

Kampaviineri
quelle
1

Magento ORM implementiert keine exotischen Datumstypen. Sie haben zwei Möglichkeiten:

  1. 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.

  2. 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:43solcher Wert in einer Ganzzahlspalte dargestellt 101143. Und Sie können immer noch die gleichen Operationen auf MySQL Ebene tun , wie mit regulärer TIMEZeit ( BETWEEN, <, >, usw.). Es gibt keine Leistungseinbußen bei der Verwendung von int anstelle von Zeit. (Ich empfehle keine VARCHARDarstellung, da die Suche über den Index langsamer ist.)

Ivan Chepurnyi
quelle
0

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 TIMETyp sehen, aber wenn Magento nur unterstützt DATETIME(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.

Giel Berkers
quelle