sql >> Databáze >  >> RDS >> PostgreSQL

Existuje způsob, jak změnit výchozí časová razítka Rails na Y-m-d H:i:s (místo Y-m-d H:i:s.u) nebo nechat laravel ignorovat desetinnou část Y-m-d H:i:s.u?

Řešení na straně Rails

Zdá se, že ActiveRecord použitý v Rails (5.2) automaticky přidává desetinné sekundy až na 1 msec při ukládání created_at a updated_at nebo jakékoli jiné sloupce Timestamp v DB, které přijímají subsekundy, jak je definováno v souboru active_record/connection_adapters/abstract/quoting.rb

Práce kolem je toto. Přidejte tento řádek na nejvyšší úroveň do libovolného souboru, který by Rails vždy četl při přístupu k modelu (jako je soubor modelu ApplicationRecord).

Time::DATE_FORMATS[:db] = '%Y-%m-%d %H:%M:%S.000000000'

module ActiveRecord::ConnectionAdapters::Quoting
  alias_method :quoted_date_orig, :quoted_date if ! self.method_defined?(:quoted_date_orig)

  def quoted_date(*rest, **kwd)
    quoted = quoted_date_orig(*rest, **kwd)
    quoted.sub(/(\.\d*)\.\d{6}$/, '\1')
  end
end

Můžete to potvrdit z konzole Rails po vytvoření nového záznamu

MyModel.last.created_at.nsec  # => 0

nebo jednoduše přistupte přímo k DB a uvidíte ji.

Upozornění

Tato změna se netýká pouze created_at a updated_at ale také všechny ostatní sloupce časových razítek v DB. Myslím, že do takového sloupce můžete stále uložit hodnotu s přesností msec (nebo nsec) nastavením řetězce na rozdíl od instance času do instance vašeho modelu, jako je my_model.col_msec_desired = "2018-01-02 03:04:05.678"; pak Time::DATE_FORMATS[:db] nebude odkazováno při ukládání záznamu.

Potenciální řešení na straně Laravel

V době psaní tohoto článku (2018-10-18) to může být složité, ale podle nejnovější příspěvek Laracast od cmbertsch01

(Poznámka:hlavní aktualizace provedená den poté od původního příspěvku po komentáři.)



  1. pomocí STORED PROCEDURES:různé výsledky v mysqli->query(CALL select_procedure) VS mysqli->query(SELECT ...)

  2. Co je Undo and Redo v databázi Oracle

  3. Proč spojení více dotazů MySQL pomocí středníků nefunguje s Perl DBI?

  4. Rozdíl mezi schématem / databází v MySQL