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
|
<?php
/**
* KumbiaPHP web & app Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://wiki.kumbiaphp.com/Licencia
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@kumbiaphp.com so we can send you a copy immediately.
*
* Implementacion del patron de diseño ActiveRecord
*
* @category Kumbia
* @package ActiveRecord
* @copyright Copyright (c) 2005-2009 Kumbia Team (http://www.kumbiaphp.com)
* @license http://wiki.kumbiaphp.com/Licencia New BSD License
*/
/**
* @see KumbiaModel
*/
require_once CORE_PATH . 'libs/ActiveRecord/active_record2/kumbia_model.php';
/**
* @see ResultSet
*/
require_once CORE_PATH . 'libs/ActiveRecord/db_pool/result_set.php';
/**
* ActiveRecord Clase para el Mapeo Objeto Relacional
*
* Active Record es un enfoque al problema de acceder a los datos de una
* base de datos en forma orientada a objetos. Una fila en la
* tabla de la base de datos (o vista) se envuelve en una clase,
* de manera que se asocian filas únicas de la base de datos
* con objetos del lenguaje de programación usado.
* Cuando se crea uno de estos objetos, se añade una fila a
* la tabla de la base de datos. Cuando se modifican los atributos del
* objeto, se actualiza la fila de la base de datos.
*/
class ActiveRecord2 extends KumbiaModel
{
/**
* Conexion a base datos que se utilizara
*
* @var strings
**/
protected $_connection = null;
/**
* Tabla origen de datos
*
* @var string
*/
protected $_table = null;
/**
* Esquema de datos
*
* @var string
*/
protected $_schema = null;
/**
* Objeto DbQuery para implementar chain
*
* @var Obj
*/
protected $_dbQuery = NULL;
/**
* Constructor de la class
*/
public function __constructor ($data = null)
{
if (is_array($data)) {
foreach ($data as $k => $v) {
$this->$k = $v;
}
}
}
/**
* Efectua una busqueda
*
* @param string|array parametros de busqueda
* @return ResultSet
**/
public function find ()
{
if(!$this->_dbQuery){
// nuevo contenedor de consulta
$this->_dbQuery = new DbQuery();
$this->_dbQuery->select();
}
// asigna la tabla
$this->_dbQuery->table($this->_table);
// asigna el esquema si existe
if ($this->_schema) {
$this->_dbQuery->schema($this->_schema);
}
//var_dump($this->_dbQuery->columns('nombre')); die;
return $this->findBySql($this->_dbQuery);
}
public function all ()
{}
/**
* Devuelve la instancia para realizar chain
*
* @return DbQuery
*/
public function get ()
{
$this->_dbQuery = new DbQuery();
return $this->_dbQuery->select();
}
/**
* Efectua una busqueda de una consulta sql
*
* @param string | DbQuery $sql
* @return ResultSet
**/
public function findBySql ($sql)
{
$params = $sql->params();
// carga el adaptador especifico para la conexion
$adapter = DbAdapter::factory($this->_connection);
// si no es un string, entonces es DbQuery
if (! is_string($sql)) {
$sql = $adapter->query($sql);
}
// ejecuta la consulta
$prepare = $adapter->pdo()->prepare($sql);
if ($prepare->execute($params)) {
return new ResultSet($prepare);
}
return FALSE;
}
/**
* Ejecuta una setencia SQL aplicando Prepared Statement
*
* @param string $sql Setencia SQL
* @param array $params parametros que seran enlazados al SQL
* @return ResulSet
*/
public function sql ($sql, $params = NULL)
{
// carga el adaptador especifico para la conexion
$adapter = DbAdapter::factory($this->_connection);
$prepare = $adapter->pdo()->prepare($sql);
if ($prepare->execute($params)) {
return new ResultSet($prepare);
}
return FALSE;
}
/**
* Realiza un insert sobre la tabla
*
* @param array $data información a ser guardada
* @return Bool
*/
public function insert ($data = null)
{
// nuevo contenedor de consulta
$dbQuery = new DbQuery();
// asigna la tabla
$dbQuery->table($this->_table);
// asigna el esquema si existe
if ($this->_schema) {
$dbQuery->schema($this->_schema);
}
$dbQuery->insert($data);
$adapter = DbAdapter::factory($this->_connection);
try {
$prepare = $adapter->pdo()->prepare($adapter->query($dbQuery));
return $prepare->execute($data);
} catch (PDOException $e) { //echo $prepare->errorCode();die;
}
//return FALSE;
}
}
|