Magento 2データ型。時間が必要です


7

これは、その列のデータ・タイプ表示されますTIMEないdatetime例えば、一日の時間だけ、12:00ではサポートされていませんが)Magento 2

時刻を保存する必要があります。これを回避するにはどうすればよいですか?
利用可能なツールとデータ型をどのように使用すればよいですか?

私は通常の特徴的な日付(1970-01-01 12:00:00データを閲覧する人を混乱させないように十分に区別できるようなもの)を保存し、それから時刻部分をで抽出することを考えましたがUI、それは恐ろしくて私をうんざりさせます。

よりエレガントな方法はありますか?


TIME形式がまだ存在しない場合は作成できますか?
ロビーアベリル

@RobbieAverillはMagento\Framework\DB\Ddl\Table、a)独自の追加でクラスをオーバーライドおよび拡張し、b)Magento\Framework\DB\Ddl\Table 直接編集しようとしましたが、それは役に立ちませんでした(setup:upgradeであらゆる種類のエラーが発生しました)。TIME形式を作成することで、具体的な意味を教えていただけますか?ZendのDBは「TIME」タイプとオプションの組み合わせだけ原因と卓上> AddColumn関数を呼び出すクラスMagentoの\ Frameworkの\ DB \ DDL \表2を時刻データ型をサポートしていますが、1編集と「時間」列の型を追加する必要があります [Zend_Db_Exception] Invalid column definition data
カンパビネリ2016

回答:


2

最初にDATETIMEを使用してこれを解決しました

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

`

次に、生のSQL実行を使用して

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

これで問題は解決しました。


1

Magento ORMはエキゾチックな日付タイプを実装していません。次の2つのオプションがあります。

  1. Magento 2.0 FrameworkのすべてのDDLクラスを書き直し、Magento 2.0の新しいリリースごとに、壊れる可能性があるため、それを維持するための頭痛の種を導入します。

  2. パフォーマンスが低下する可能性があるため、必ずしも日付に関連するものではなく、別の使用可能なデータ型を使用してください。数字のみの時間表現であるINTを使用してみることができます。次に、たとえば、10:11:43整数の列でそのような値として表されます101143。そして、あなたはまだ、通常の場合と同様に、MySQLのレベルで同じ操作を行うことができTIME、時間(BETWEEN<>、など)。時間の代わりにintを使用しても、パフォーマンスの低下はありません。(VARCHARインデックスの検索が遅いため、表現はお勧めしません)


0

正直に言うと、「The Magento Way™」を実行してください。これが、上位互換性で頭痛の種になる可能性が最も低い方法です。TIME-typeも確認したいのですが、Magentoがサポートしているだけの場合DATETIME(おそらくデータソースの抽象化が原因)、代わりにそれを使用します。

誰かが知っている...多分ある日Magentoは、バージョン2.xが、をサポートしていない新しい高速なデータベースをサポートすることを決定するかもしれませんTIME。DDLを書き直した(または生のテーブルをその場で変更した)と、厄介な副作用が発生する可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.