模式,更改和数据类型
在这一点上,您可能会开始怀疑为什么在处理架构和更改。
虽然迁移对我们提供数据库表负有责任,但模式对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