-
Notifications
You must be signed in to change notification settings - Fork 0
/
modelo.htm
408 lines (357 loc) · 17.1 KB
/
modelo.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=Generator content="Microsoft Word 15 (filtered)">
<link rel="stylesheet" href="css/ligne.min.css?v1.2">
<link rel="stylesheet" href="css/menu.css">
<link rel="stylesheet" href="css/code_style.css">
<script src="js/includes.js"></script>
<script src="js/rainbow-custom.min.js"></script>
<script src="js/php.js"></script>
<title>Modelo</title>
<style>
/* Font Definitions */
* {
font-family: Verdana, sans-serif;
}
/*Estilo del codigo php*/
p.MsoNormal, li.MsoNormal, div.MsoNormal {
margin-top: 0cm;
margin-right: 0cm;
margin-bottom: 8.0pt;
margin-left: 0cm;
line-height: 1.5rem;
font-size: 14pt;
font-family: "Calibri", sans-serif;
}
pre {
mso-style-link: "HTML con formato previo Car";
margin: 0cm;
margin-bottom: .0001pt;
font-size: 10.0pt;
font-family: "Courier New";
}
ol li {
margin: 8px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="container-fluid">
<div w3-include-html="includes/tabla_contenido.html"></div>
<!--incluyendo el menu-->
<div w3-include-html="includes/menu.html"></div>
<!--incluyendo el menu-->
<div class="panel bordered">
<div class="panel">
<div class="body">
<h3>Contenido</h3>
<ol>
<li><a href="#como_funcionan_modelos" class="important undecoration primary">Como funcionan los modelos</a></li>
<li><a href="#recuperar_datps" class="important undecoration primary">Recuperar datos Pdox</a></li>
<li><a href="#ejemplo_seleccion" class="important undecoration primary">Ejemplo de selección un único registro</a></li>
<li><a href="#getall" class="important undecoration primary">GetAll()</a></li>
<li><a href="#insertando_datos" class="important undecoration primary">Insertando datos</a></li>
<li><a href="#actualizando_datos" class="important undecoration primary">Actualizando registros</a></li>
<li><a href="#eliminando_datos" class="important undecoration primary">Eliminar registros</a></li>
<li><a href="#metodo_query" class="important undecoration primary">Consultas método Query</a></li>
<li><a href="#resumen" class="important undecoration primary">Resumen</a></li>
</ol>
</div>
</div>
<div class="body">
<div id="como_funcionan_modelos" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Modelos</span></b></p>
<p class=MsoNormal>Los modelos son las clases que forman la capa empresarial en
su aplicación. Deben ser responsables de administrar casi todo lo relacionado
con sus datos, su validez y sus interacciones.</p>
<p class=MsoNormal>Generalmente, las clases modelo representan datos y se usan
en las aplicaciones de Ligne para el acceso a datos. Pueden usarse para acceder
a cualquier cosa que manipule datos, como archivos, servicios web externos.</p>
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Como
funcionan los modelos</span></b></p>
<p class=MsoNormal>Un modelo representa su modelo de datos. En la programación
orientada a objetos, un modelo de datos es un objeto que representa una cosa
como una persona o una casa. Un blog, por ejemplo, puede tener muchas
publicaciones y cada publicación del blog puede tener muchos comentarios. El
Blog, Publicación y Comentario son todos ejemplos de modelos, cada uno asociado
con otro.</p>
<p class=MsoNormal>Aquí hay un ejemplo simple de una definición de modelo en Ligne:</p>
<pre>
<code data-language="php">
namespace Models\Tasks;
class Tasks extends Model{
public function index(){
//code...
}
}
</code>
</pre>
<p class=MsoNormal>Con solo esta simple declaración, el modelo <b>Tasks </b>está
dotado de toda la funcionalidad que necesita para crear consultas y guardar y
eliminar datos. Estos métodos provienen de la clase Modelo de Ligne por la
magia de la herencia. Es esta clase <b>Model </b>central la que otorga la
funcionalidad a su modelo de <b>Tasks</b>.</p>
<p class=MsoNormal>Para poder trabajar con el modelo <b>Tasks</b>, se crea el
archivo PHP en el directorio <span style='background:silver'>/Models/Tasks/</span>.
Por convención, debería tener el mismo nombre que la clase, que para este
ejemplo será <span style='background:silver'>Tasks.php</span></p>
<p class=MsoNormal>
Esta clase debe contener un <span style='background:silver'>namespace</span> ya que este se utiliza para incluir el modelo en donde sea necesario su uso.
El namespace no es más que el directorio con barras invertidas donde esta el modelo, por ejemplo, en nuestro caso el modelo está en el directorio <span style='background:silver'>/Models/Tasks/</span>.
</p>
</div>
</div>
<div id="recuperar_datps" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Recuperar
datos Pdox</span></b></p>
<p class=MsoNormal>El generador de consultas Pdox proporciona una interfaz
fluida fácil de usar para crear y ejecutar consultas. Al componer las consultas
juntas, puede crear consultas avanzadas utilizando uniones y subconsultas con
facilidad.</p>
<p class=MsoNormal>Debajo de las capas, el generador de consultas utiliza
declaraciones preparadas con PDO que protegen contra ataques de inyección SQL</p>
<p class=MsoNormal> </p>
</div>
</div>
<div id="ejemplo_seleccion" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Ejemplo
de selección un único registro</span></b></p>
<p class=MsoNormal>Podemos obtener un registro con el método <span
style='background:silver'>get()</span> veamos un ejemplo de consulta por un
criterio en concreto;</p>
<pre>
<code data-language="php">
public function showTask($id)
{
$req = $this->getBdd()->table('tasks')
->select('id, title, description, created_at,updated_at,success')
->where('id','=',$id)
->get();
return $req;
}
</code>
</pre>
<p class=MsoNormal>La sintaxis es sumamente sencilla, tenemos un método <span
style='background:silver'>getBdd()</span> el cual nos proporciona una conexión
nueva a la base de datos, luego de esto es aquí donde entra la magia de Pdox <i>(Query
Builder) </i>el mismo nos proporciona una serie de métodos que nos facilitaran
la vida.</p>
<p class=MsoNormal>La salida de esta consulta seria;</p>
<pre>
<code data-language="php">
array (size=6)
'id' => string '17' (length=2)
'title' => string 'New task' (length=8)
'description' => string 'yes!' (length=4)
'created_at' => string '2018-10-10 22:54:30' (length=19)
'updated_at' => string '2018-10-12 15:05:25' (length=19)
'success' => string '0' (length=1)
</code>
</pre>
</div>
</div>
<div id="getall" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>GetAll()</span></b></p>
<p class=MsoNormal>Así como realizamos consultas de registros individuales,
podemos hacer consultas de un conglomerado de registros con el método <span
style='background:silver'>getAll().</span> En este caso obtendremos todas las
tareas que su valor <b>success</b> sea igual a <b>0</b> y ordenaremos estos
registros por <b>created_at</b> de manera descendente;</p>
<pre>
<code data-language="php">
public function showAllTasks()
{
$req = $this->getBdd()->table('tasks')
->select('id, title, description, created_at,updated_at,success')
->where('success','=',0)
->orderBy('created_at', 'desc')
->getAll();
return $req;
}
</code>
</pre>
<table class="table striped secondary bordered medium">
<thead>
<th>Método</th>
<th>Descripción</th>
</thead>
<tbody>
<tr>
<td>table()</td>
<td>Nombre de la tabla (‘tasks’)</td>
</tr>
<tr>
<td>select()</td>
<td>Campos que queremos obtener (‘campo1, campo2, campo3,….’)</td>
</tr>
<tr>
<td>where()</td>
<td>Criterio (‘campo’,’operador’,’valor’)</td>
</tr>
<tr>
<td>orderBy()</td>
<td>Ordena los datos (‘campo’,’orden’)</td>
</tr>
<tr>
<td>getAll();</td>
<td>Obtener todos los resultados</td>
</tr>
</tbody>
</table>
<br>
<p class=MsoNormal><span lang=EN-US>Salida;</span></p>
<pre>
<code data-language="php">
array (size=2)
0 =>
array (size=6)
'id' => string '17' (length=2)
'title' => string 'New task' (length=8)
'description' => string 'yes!' (length=4)
'created_at' => string '2018-10-10 22:54:30' (length=19)
'updated_at' => string '2018-10-12 15:05:25' (length=19)
'success' => string '0' (length=1)
1 =>
array (size=6)
'id' => string '15' (length=2)
'title' => string 'new config' (length=13)
'description' => string 'a new config, yeah!' (length=22)
'created_at' => string '2018-10-10 20:32:37' (length=19)
'updated_at' => string '2018-10-10 20:32:37' (length=19)
'success' => string '0' (length=1)
</code>
</pre>
</div>
</div>
<div id="insertando_datos" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Insertando
datos</span></b></p>
<p class=MsoNormal>A diferencia de los ejemplos anteriores, no debe utilizar <span
style='background:silver'>get()</span> ni <span style='background:silver'>getAll()</span>
para crear consultas de inserción. En lugar de esto creamos un arreglo
asociativo el cual puede ser como el ejemplo a continuación;</p>
<pre>
<code data-language="php">
$data = [
'title' => $title,
'description' => $description,
'created_at' => date('Y-m-d H:i:s')
];
</code>
</pre>
<p class=MsoNormal>Este arreglo es pasado al método <span style='background:silver'>insert()</span> de la siguiente manera;</p>
<pre>
<code data-language="php">
$data = [
'title' => $title,
'description' => $description,
'created_at' => date('Y-m-d H:i:s')
];
$this->getBdd()->table('tasks')->insert($data);
</code>
</pre>
<p class=MsoNormal>Puedes obtener el <b>id </b>insertado con una simple línea
luego de realizada la inserción de datos;</p>
<pre>
<code data-language="php">
$data = [
'title' => $title,
'description' => $description,
'created_at' => date('Y-m-d H:i:s')
];
$this->getBdd()->table('tasks')->insert($data);
//Obteniendo el id insertado
$last_insert_id = $this->getBdd()->insertId();
</code>
</pre>
</div>
</div>
<div id="actualizando_datos" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Actualizando
registros</span></b></p>
<p class=MsoNormal>Como vimos en el ejemplo se inserción de datos en el caso de
actualizar tampoco usaremos los métodos <span style='background:silver'>get()</span>
y <span style='background:silver'>getAll()</span> en lugar de esto usaremos <span
style='background:silver'>update()</span>;</p>
<p class=MsoNormal>Crearemos un arreglo asociativo como en el ejemplo anterior,
esta vez solo con los datos que se actualizarán, no es necesario enviar todos
los campos;</p>
<pre>
<code data-language="php">
$data = [
'title' => $title,
'description' => $description,
'updated_at' => date('Y-m-d H:i:s')
];
$this->getBdd()->table('tasks')->where('id','=', $id)->update($data);
</code>
</pre>
<p class=MsoNormal>En este caso como actualizaremos un registro por su <b>id</b>
debemos usar el método <span style='background:silver'>where()</span> seguido
del método <span style='background:silver'>update()</span>, a este ultimo le
pasamos nuestro arreglo.</p>
<p class=MsoNormal> </p>
</div>
</div>
<div id="eliminando_datos" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%'>Eliminar
registros</span></b></p>
<p class=MsoNormal>Es mas sencillo eliminar registros ya que en esta ocasión no
necesitamos crear ningún arreglo, esto es tan sencillo como especificar con el
metodo <span style='background:silver'>where()</span> los criterios;</p>
<pre>
<code data-language="php">
$this->getBdd()->table('tasks')->where('id','=', $id)->delete();
</code>
</pre>
</div>
</div>
<div id="metodo_query" class="panel bordered">
<div class="body">
<p class=MsoNormal><b><span style='font-size:16.0pt;line-height:107%;
color:black'>Consultas método Query</span></b></p>
<p class=MsoNormal>También puedes realizar consultas
SQL utilizando el método<span style='background:silver'>query()</span></p>
<pre>
<code data-language="php">
//Select todos por criterio
$this->getBdd()->query('SELECT * FROM test WHERE id=? AND status=?', [10, 1])->fetchAll();
//Selecionar 1 registro
$this->getBdd()->query('SELECT * FROM test WHERE id=? AND status=?', [10, 1])->fetch();
//Puedes usar consultas como update, insert, select, etc...
$this->getBdd()->query('DELETE FROM test WHERE id=?', [10])->exec();
</code>
</pre>
<p class=MsoNormal>Se recomienda utilizar los método del Query Builder en todos los casos
ya que tienes una sintaxis más organizada y legible, inclusive escalable.</p>
</div>
</div>
<div id="resumen" class="panel bordered">
<div class="body">
<h3>Resumen</h3>
<p class=MsoNormal>En general es mas sencillo que las consultas anteriores. En esta sección solo veremos consultas simples como las
anteriores, para ampliar más puede visitar la documentación del Query Builder <a href="query_builder.htm" class="primary important undecoration">Query Builder</a>
</p>
</div>
</div>
</div>
</div>
<!--incluyendo el pie de pagina-->
<div w3-include-html="includes/pie_pagina.html"></div>
<script>
includeHTML();
</script>
<!--incluyendo el pie de pagina-->
</div>
</body>
</html>