76
94
* ResulSet PDOStatement
80
98
private $_resultSet = NULL;
101
* Modo de obtener datos
105
protected $_fetchMode = self::FETCH_MODEL;
83
108
* Constructor de la class
85
111
public function __construct ($data = null)
87
113
if (is_array($data)) {
88
foreach ($data as $k => $v) {
95
* Efectua una busqueda
99
public function find ()
101
if (! $this->_dbQuery) {
104
return $this->findBySql($this->_dbQuery);
107
public function all ()
111
* Devuelve la instancia para realizar chain
115
public function get ()
117
// crea la instancia de DbQuery
118
$this->_dbQuery = new DbQuery();
121
$this->_dbQuery->table($this->_table);
123
// asigna el esquema si existe
124
if ($this->_schema) {
125
$this->_dbQuery->schema($this->_schema);
128
return $this->_dbQuery->select();
132
* Efectua una busqueda de una consulta sql
134
* @param string | DbQuery $sql
135
* @param array $params parametros que seran enlazados al SQL
138
public function findBySql ($sql, $params = NULL)
140
// carga el adaptador especifico para la conexion
141
$adapter = DbAdapter::factory($this->_connection);
143
// si no es un string, entonces es DbQuery
144
if (! is_string($sql)) {
145
$sql = $adapter->query($sql);
146
$params = $sql->getBind();
149
// ejecuta la consulta
150
$this->_resultSet = $adapter->pdo()->prepare($sql);
151
if ($this->_resultSet->execute($params)) {
158
* Ejecuta una setencia SQL aplicando Prepared Statement
160
* @param string $sql Setencia SQL
161
* @param array $params parametros que seran enlazados al SQL
164
public function sql ($sql, $params = NULL)
166
// carga el adaptador especifico para la conexion
167
$adapter = DbAdapter::factory($this->_connection);
168
$this->_resultSet = $adapter->pdo()->prepare($sql);
169
if ($this->_resultSet->execute($params)) {
176
* Realiza un insert sobre la tabla
178
* @param array $data información a ser guardada
181
public function create ($data = NULL)
183
// nuevo contenedor de consulta
184
$dbQuery = new DbQuery();
186
$dbQuery->table($this->_table);
187
// asigna el esquema si existe
188
if ($this->_schema) {
189
$dbQuery->schema($this->_schema);
191
$adapter = DbAdapter::factory($this->_connection);
193
$this->_resultSet = $adapter->pdo()->prepare($adapter->query($dbQuery->insert($data)));
194
$this->_resultSet->execute($dbQuery->getBind());
196
} catch (PDOException $e) {
197
//aqui debemos ir a cada adapter y verificar el código de error SQLSTATE
198
echo $this->_resultSet->errorCode();
203
* Realiza un update sobre la tabla
205
* @param array $data información a ser guardada
208
public function updateAll ($data)
210
if (! $this->_dbQuery) {
214
$adapter = DbAdapter::factory($this->_connection);
216
$this->_resultSet = $adapter->pdo()->prepare($adapter->query($this->_dbQuery->update($data)));
217
$this->_resultSet->execute($this->_dbQuery->getBind());
219
} catch (PDOException $e) {
220
//aqui debemos ir a cada adapter y verificar el código de error SQLSTATE
221
echo $this->_resultSet->errorCode();
226
* Realiza un delete sobre la tabla
230
public function deleteAll ()
232
if (! $this->_dbQuery) {
236
$adapter = DbAdapter::factory($this->_connection);
238
$this->_resultSet = $adapter->pdo()->prepare($adapter->query($this->_dbQuery->delete()));
239
$this->_resultSet->execute($this->_dbQuery->getBind());
241
} catch (PDOException $e) {
242
//aqui debemos ir a cada adapter y verificar el código de error SQLSTATE
243
echo $this->_resultSet->errorCode();
250
* @param string Class
253
public function fetchObject ()
255
$this->_resultSet->setFetchMode(PDO::FETCH_INTO, $this);
256
return $this->_resultSet->fetch();
119
* Carga el array como atributos del objeto
123
protected function _dump($data)
125
foreach ($data as $k => $v) {
131
* Modo de obtener datos
133
* @param integer $mode
134
* @return ActiveRecord
136
public function setFetchMode($mode)
138
$this->_fetchMode = $mode;
260
143
* reset result set pointer
304
187
return $this->_pointer < $this->_resultSet->rowCount();
191
* Indica el modo de obtener datos al ResultSet actual
194
protected function _fetchMode()
196
switch ($this->_fetchMode) {
197
// Obtener instancias del mismo modelo
198
case self::FETCH_MODEL:
199
$this->_resultSet->setFetchMode(PDO::FETCH_INTO, new self());
202
// Obtener instancias de objetos simples
203
case self::FETCH_OBJ:
204
$this->_resultSet->setFetchMode(PDO::FETCH_OBJ);
208
case self::FETCH_ARRAY:
209
$this->_resultSet->setFetchMode(PDO::FETCH_ASSOC);
215
* Asigna la tabla fuente de datos
217
* @param string $table
218
* @return ActiveRecord
220
public function setTable($table)
222
$this->_table = $table;
227
* Obtiene la tabla fuente de datos
231
public function getTable()
235
$this->_table = Util::smallcase(get_class($this));
239
return $this->_table;
245
* @param string $schema
246
* @return ActiveRecord
248
public function setSchema($schema)
250
$this->_schema = $schema;
259
public function getSchema()
261
return $this->_schema;
265
* Ejecuta una setencia SQL aplicando Prepared Statement
267
* @param string $sql Setencia SQL
268
* @param array $params parametros que seran enlazados al SQL
269
* @return ActiveRecord
271
public function sql ($sql, $params = NULL)
273
// Obtiene una instancia del adaptador
274
$adapter = DbAdapter::factory($this->_connection);
277
// Prepara la consulta
278
$this->_resultSet = $adapter->prepare($sql);
280
// Indica el modo de obtener los datos en el ResultSet
283
// Ejecuta la consulta
284
$this->_resultSet->execute($params);
286
} catch (PDOException $e) {
287
// Aqui debemos ir a cada adapter y verificar el código de error SQLSTATE
288
echo $this->_resultSet->errorCode();
295
* Ejecuta una consulta de dbQuery
297
* @param DbQuery $dbQuery Objeto de consulta
298
* @return ActiveRecord
300
public function query($dbQuery)
302
$dbQuery->table($this->getTable());
304
// Asigna el esquema si existe
305
if ($this->_schema) {
306
$dbQuery->schema($this->_schema);
309
// Obtiene una instancia del adaptador
310
$adapter = DbAdapter::factory($this->_connection);
313
// Prepara la consulta
314
$this->_resultSet = $adapter->prepareDbQuery($dbQuery);
316
// Indica el modo de obtener los datos en el ResultSet
319
// Ejecuta la consulta
320
$this->_resultSet->execute($dbQuery->getBind());
322
} catch (PDOException $e) {
323
// Aqui debemos ir a cada adapter y verificar el código de error SQLSTATE
324
echo $this->_resultSet->errorCode();
329
* Devuelve la instancia para realizar chain
333
public function get ()
335
// Crea la instancia de DbQuery
336
$this->_dbQuery = new DbQuery();
338
return $this->_dbQuery;
342
* Efectua una busqueda
344
* @return ActiveRecord
346
public function find ()
348
if (! $this->_dbQuery) {
351
return $this->query($this->_dbQuery->select());
355
* Obtiene un array con los items resultantes de la busqueda
359
public function all ()
361
return $this->find()->_resultSet->fetchAll();
365
* Obtiene el primer elemento de la busqueda
367
* @return ActiveRecord
369
public function first ()
371
if (! $this->_dbQuery) {
375
// Realiza la busqueda y retorna el objeto ActiveRecord
376
return $this->query($this->_dbQuery->select()->limit(1)->offset(0))->_resultSet->fetch();
380
* Busca por medio de una columna especifica
382
* @param string $column columna de busqueda
383
* @param string $value valor para la busqueda
384
* @return ActiveRecord
386
public function findBy($column, $value)
388
$this->get()->where("$column = :value")->bind(array('value' => $value));
389
return $this->first();
393
* Busca por medio de una columna especifica y obtiene todas la coincidencias
395
* @param string $column columna de busqueda
396
* @param string $value valor para la busqueda
397
* @return ActiveRecord
399
public function findAllBy($column, $value)
401
$this->get()->where("$column = :value")->bind(array('value' => $value));
402
return $this->find();
406
* Buscar por medio de la clave primaria
408
* @param string $value
410
public function findByPK($value)
412
// Obtiene una instancia del adaptador
413
$adapter = DbAdapter::factory($this->_connection);
414
$metadata = $adapter->describe($this->getTable(), $this->_schema);
416
return $this->findBy($metadata->getPK(), $value);
420
* Realiza un insert sobre la tabla
422
* @param array $data información a ser guardada
425
public function create ($data = NULL)
427
// Nuevo contenedor de consulta
428
$dbQuery = new DbQuery();
430
// Ejecuta la consulta
431
return $this->query($dbQuery->insert($data));
435
* Realiza un update sobre la tabla
437
* @param array $data información a ser guardada
440
public function updateAll ($data)
442
if (! $this->_dbQuery) {
446
// Ejecuta la consulta
447
return $this->query($this->_dbQuery->update($data));
451
* Realiza un delete sobre la tabla
455
public function deleteAll ()
457
if (! $this->_dbQuery) {
461
// Ejecuta la consulta
462
return $this->query($this->_dbQuery->delete());