在长生不老药和ECTO第3部分入门
#网络开发人员 #database #codenewbie #elixir

模式,更改和数据类型

在这一点上,您可能会开始怀疑为什么在处理架构和更改

虽然迁移对我们提供数据库表负有责任,但模式对ECTO与这些表进行交互负责。

一个模式是我们数据库中数据的精神病。数据在您的应用程序中从数据库中表示。

架构/2 通常用于从持久源(通常是数据库表)映射数据中的数据,将其映射到Elixir structs和Vice-vice-vice-vice-vice-vice-vice-vice-vice。

embedded_schema/1 用于定义嵌入在其他模式中或仅存在于内存中的模式。

更改定义了一个转换管道,我们的数据需要在我们的应用程序中使用它才能使用。这些转换可能包括类型铸造,用户输入验证和过滤所有其他参数。

注意:您实际上可以使用嵌入式模式来描述您的UI,映射和验证其输入,然后将此类嵌入式模式转换为可以将数据持续到数据库的其他模式。

注意: ecto中的命名约定是一个奇异的名称。

ECTO TYPE  -> ELIXIR TYPE  -> LITERAL SYNTAX IN QUERY

:id -> integer  { 1, 2, ...}
:binary_id -> binary  { <<int, int, ...>> }
:integer -> integer  { 1, 2, ...}
:float -> float  { 1.0, 2.0, ... }
:boolean -> boolean  { true, false }
:string -> UTF-8 encoded string  { "hello" }
:binary -> binary { int, int, ... }
{:array, inner_type} -> list { [value, value, ...] }
:map -> map
{:map, inner_type} -> map
:decimal -> Decimal
:date -> Date
:time -> Time
:time_usec -> Time
:naive_datetime -> NaiveDateTime
:naive_datetime_usec -> NaiveDateTime
:utc_datetime -> DateTime
:utc_datetime_usec -> DateTime

您可以通过简单地启动IEX IEX -S MIX
来轻松使用模式

task = %Taskers.Task{}

We can set values on these fields by generating a new struct:
task = %Taskers.Task{estimated_time: 28}
task = %{task | estimated_time: 3.0}

And retrieve values using this syntax:
task.estimated_time # => 3.0