You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Para crear un `SchemaBuilder`, usa el método `schema` en "database". Pásale el nombre de la tabla o colección que quieras afectar. Si estás editando el esquema para un modelo, asegúrate de que este nombre coincida con el [`schema`](model.md#schema) del modelo.
14
+
Para crear un `SchemaBuilder`, usa el método `schema` en "database". Pásale el nombre de la tabla o colección que quieras afectar. Si estás editando el esquema para un modelo, asegúrate de que este nombre coincida con el [`schema`](model.md#schema) del modelo.
15
15
16
16
## Acciones
17
17
18
-
La API de schema soporta crear, actualizar y borrar esquemas. Cada acción soporta un subconjunto de los métodos de la API disponibles.
18
+
La API de schema soporta crear, actualizar y borrar esquemas. Cada acción soporta un subconjunto de los métodos de la API disponibles.
19
19
20
20
### Crear
21
21
22
-
Llamar a `create()` crea una nueva tabla o colección en la base de datos. Todos los métodos para definir nuevos campos y restricciones (constraints) están soportados. Los métodos para actualizaciones y borrados se ignoran.
22
+
Llamar a `create()` crea una nueva tabla o colección en la base de datos. Todos los métodos para definir nuevos campos y restricciones (constraints) están soportados. Los métodos para actualizaciones y borrados se ignoran.
Pueden añadirse campos cuando se crea o actualiza un esquema.
57
+
Pueden añadirse campos cuando se crea o actualiza un esquema.
58
58
59
59
```swift
60
60
// Añade un campo nuevo
61
61
.field("name", .string, .required)
62
62
```
63
63
64
-
El primer parámetro es el nombre del campo. Este nombre debería coincidir con la clave usada en la propiedad del modelo. El segundo parámetro es el [tipo de dato](#tipos-de-datos) del campo. Por último, puedes añadir cero o más [restricciones](#restricciones-de-campo).
64
+
El primer parámetro es el nombre del campo. Este nombre debería coincidir con la clave usada en la propiedad del modelo. El segundo parámetro es el [tipo de dato](#tipos-de-datos) del campo. Por último, puedes añadir cero o más [restricciones](#restricciones-de-campo).
65
65
66
66
### Tipos de Datos
67
67
@@ -86,13 +86,14 @@ Debajo hay un listado con los tipos de datos soportados.
86
86
87
87
### Restricciones de Campo
88
88
89
-
Debajo hay un listado con las restricciones de campo (field constraints) soportadas.
89
+
Debajo hay un listado con las restricciones de campo (field constraints) soportadas.
90
90
91
91
|FieldConstraint|Descripción|
92
92
|-|-|
93
93
|`.required`|No permite valores `nil`.|
94
-
|`.references`|Requiere que el valor del campo coincida con un valor del esquema referenciado. Ver [clave externa](#clave-externa)|
95
-
|`.identifier`|Denota la clave primaria. Ver [identificador](#identificador)|
94
+
|`.references`|Requiere que el valor del campo coincida con un valor del esquema referenciado. Ver [clave externa](#clave-externa).|
95
+
|`.identifier`|Denota la clave primaria. Ver [identificador](#identificador).|
96
+
|`.sql(SQLColumnConstraintAlgorithm)`|Define cualquier restricción no compatible (p. ej. `default`). Consulta [SQL](#sql) y [SQLColumnConstraintAlgorithm](https://api.vapor.codes/sqlkit/documentation/sqlkit/sqlcolumnconstraintalgorithm/).|
96
97
97
98
### Identificador
98
99
@@ -103,18 +104,18 @@ Si tu modelo usa una propiedad `@ID` estándar, puedes usar el helper `id()` par
103
104
.id()
104
105
```
105
106
106
-
Para tipos de identificador personalizados, necesitarás especificar el campo manualmente.
107
+
Para tipos de identificador personalizados, necesitarás especificar el campo manualmente.
107
108
108
109
```swift
109
110
// Añade campo para identificador personalizado.
110
111
.field("id", .int, .identifier(auto: true))
111
112
```
112
113
113
-
La restricción `identifier` debe usarse en un único campo, y denote la clave primaria. La marca (flag) `auto` determina si la base de datos deberá generar el valor automáticamente o no.
114
+
La restricción `identifier` debe usarse en un único campo, y denote la clave primaria. La marca (flag) `auto` determina si la base de datos deberá generar el valor automáticamente o no.
114
115
115
116
### Actualizar Campo
116
117
117
-
Puedes actualizar el tipo de dato de un campo usando `updateField`.
118
+
Puedes actualizar el tipo de dato de un campo usando `updateField`.
118
119
119
120
```swift
120
121
// Actualiza el campo al tipo de dato `double`.
@@ -138,7 +139,7 @@ Las restricciones (constraints) pueden añadirse al crear o actualizar un esquem
138
139
139
140
### Unique
140
141
141
-
Una restricción "unique" requiere que no existan valores duplicados en uno o más campos.
142
+
Una restricción "unique" requiere que no existan valores duplicados en uno o más campos.
142
143
143
144
```swift
144
145
// No permite direcciones de email duplicadas.
@@ -152,7 +153,7 @@ Si varios campos son restringidos, la combinación de los valores de cada campo
152
153
.unique(on: "first_name", "last_name")
153
154
```
154
155
155
-
Para borrar una restricción "unique", usa `deleteUnique`.
156
+
Para borrar una restricción "unique", usa `deleteUnique`.
156
157
157
158
```swift
158
159
// Elimina la restricción de email duplicado.
@@ -168,7 +169,7 @@ Fluent generará nombres de restricción únicos por defecto. Sin embargo, puede
168
169
.unique(on: "email", name: "no_duplicate_emails")
169
170
```
170
171
171
-
Para borrar una restricción con nombre, debes usar `deleteConstraint(name:)`.
172
+
Para borrar una restricción con nombre, debes usar `deleteConstraint(name:)`.
172
173
173
174
```swift
174
175
// Elimina la restricción de email duplicado.
@@ -177,7 +178,7 @@ Para borrar una restricción con nombre, debes usar `deleteConstraint(name:)`.
177
178
178
179
## Clave Externa
179
180
180
-
Las restricciones de clave externa requieren que el valor de un campo coincida con uno de los valores del campo referenciado. Esto es útil para prevenir el guardado de datos no válidos. Las restricciones de clave externa pueden añadirse como restricciones de campo o de nivel superior.
181
+
Las restricciones de clave externa requieren que el valor de un campo coincida con uno de los valores del campo referenciado. Esto es útil para prevenir el guardado de datos no válidos. Las restricciones de clave externa pueden añadirse como restricciones de campo o de nivel superior.
181
182
182
183
Para añadir una restricción de clave externa a un campo, usa `.references`.
183
184
@@ -195,7 +196,7 @@ Esta misma restricción podría añadirse como una de nivel superior usando `for
195
196
.foreignKey("star_id", references: "stars", "id")
196
197
```
197
198
198
-
A diferencia de las restricciones de campo, las de nivel superior pueden añadirse en una actualización del esquema. También pueden [nombrarse](#nombre-de-constraint).
199
+
A diferencia de las restricciones de campo, las de nivel superior pueden añadirse en una actualización del esquema. También pueden [nombrarse](#nombre-de-constraint).
199
200
200
201
Las restricciones de clave externa soportan las acciones opcionales `onDelete` y `onUpdate`.
201
202
@@ -215,7 +216,7 @@ Debajo hay un ejemplo del uso de acciones de clave externa.
215
216
```
216
217
217
218
!!! warning "Advertencia"
218
-
Las acciones de clave externa ocurren únicamente en la base de datos, evitando a Fluent.
219
+
Las acciones de clave externa ocurren únicamente en la base de datos, evitando a Fluent.
219
220
Esto significa que cosas como el middleware de modelo o el borrado no permanente (soft-delete) pueden no funcionar correctamente.
220
221
221
222
## SQL
@@ -235,7 +236,7 @@ o inclusive un valor por defecto para una marca de tiempo (timestamp):
235
236
236
237
## Diccionario
237
238
238
-
El tipo de dato diccionario es capaz de guardar valores de diccionario anidados. Esto inclute structs conformadas con `Codable` y diccionarios de Swift con un valor `Codable`.
239
+
El tipo de dato diccionario es capaz de guardar valores de diccionario anidados. Esto inclute structs conformadas con `Codable` y diccionarios de Swift con un valor `Codable`.
239
240
240
241
!!! note "Nota"
241
242
Los conectores de bases de datos SQL de Fluent guardan diccionarios anidados en columnas JSON.
@@ -262,15 +263,15 @@ Este campo puede guardarse usando el tipo de dato `.dictionary(of:)`.
262
263
.field("pet", .dictionary, .required)
263
264
```
264
265
265
-
Como los tipos `Codable` son diccionarios heterogéneos, no especificamos el parámetro `of`.
266
+
Como los tipos `Codable` son diccionarios heterogéneos, no especificamos el parámetro `of`.
266
267
267
268
Si los valores del diccionario fueran homogéneos, por ejemplo `[String: Int]`, el parámetro `of` especificaría el tipo del valor.
Las claves de los diccionarios deben ser siempre cadenas (strings).
274
+
Las claves de los diccionarios deben ser siempre cadenas (strings).
274
275
275
276
## Array
276
277
@@ -289,7 +290,7 @@ Este campo puede guardarse usando el tipo de dato `.array(of:)`.
289
290
.field("tags", .array(of: .string), .required)
290
291
```
291
292
292
-
Como el array es homogéneo, especificamos el parámetro `of`.
293
+
Como el array es homogéneo, especificamos el parámetro `of`.
293
294
294
295
Los `Array`s de Swift que puedan codificarse siempre tendrán un tipo de valor homogéneo. Los tipos `Codable` personalizados que serializan valores heterogéneos a contenedores sin clave son una excepción y deberían usar el tipo de dato `.array`.
0 commit comments