Consultas directas - mayako/Spaguetti GitHub Wiki

Selecciones

Ejemplos

Todos los registros

$users = Database::query('SELECT * FROM users')->all();
$users = Database::query('SELECT * FROM users WHERE id = :id', ['id' => 1], ['as' => 'assoc'], function($user){
  echo $user['name'];
});
$users = Database::query('SELECT * FROM users WHERE id = :id', ['id' => 1])->as_assoc()->fetch(function($user){
  echo $user['name'];
});
$users = Database::table('users')->where(['id' => 1])->run(['as' => 'assoc']);
$users = Database::table('users')->where(['id' => 1])->run(['as' => 'User', 'props_late']);
$users = Database::table('users')->where(['id' => 1])->run(['as' => ['User', 'props_late']]);

Un registro

$users = Database::query('SELECT * FROM users')->one();
$users = Database::query('SELECT * FROM users')->only_one();
$users = Database::query('SELECT * FROM users')->first();

Modo de retorno

Arreglo asociativo

$users = Database::query('SELECT * FROM users')->as_assoc()->one();

Objeto

$users = Database::query('SELECT * FROM users')->as_object()->one();
$users = Database::query('SELECT * FROM users')->as_object('User')->all();

Iteracion

$users = Database::query('SELECT * FROM users')->fetch(function($user) {
  echo $user->name;
});

Por default all() es lanzada, ya no puedes iterar un solo registro.

Podrias iterar pero los atributos.

Parametros

$users = Database::query('SELECT * FROM users WHERE id = :id',['id' => 1])->one();

Inserciones

$users = Database::insert("INSERT INTO users VALUES(1, 'Yako')")->apply();
$users = Database::insert("INSERT INTO users VALUES(1, 'Yako')")->last_id();

Actualizaciones

$users = Database::update("UPDATE users SET name = 'Yako'")->apply();

Eliminaciones

$users = Database::delete("DELETE FROM users WHERE id = 1")->apply();

Consultas

Seleccionar un conjunto de resultados

Para correr una consulta básica, puedes usar el método select en la clase DB:

$users = DB::select('select * from users where active = ?', [1]);

El primer argumento pasado al método select es una consulta SQL, mientras que el segundo argumento es cualquier parámetro que necesita ser enlazado a la consulta. Normalmente, estos son los valores del la clausula where. Los parámetros proveen protección contra la inyección de SQL.

El método select siempre retornara un arreglo de resultados. Cada resultado en el arreglo sera un objecto stdClass, permitiéndote acceso a los valores del resultado:

foreach ($users as $user) {
	echo $user->name;
}

Usando parámetros nombrados

En lugar de usar ? para representar los parámetros, puedes ejecutar una consulta usando los parámetros nombrados:

$users = DB::select('SELECT * FROM users WHERE active= :active', ['active' => 1]);

Seleccionar un solo resultado

El método select_one proporciona el primer elemento del arreglo de resultados de la consulta:

$user = DB::select_one('SELECT * FROM users WHERE id = ? LIMIT 1', [1]);

Se recomienda el uso de la instrucción LIMIT 1 para evitar el volcado de todos los datos.

Inserciones

Para ejecutar una inserción, puedes usar el método insert de la clase DB. Este método devolverá un boolean indicando si la inserción fue ejecutada correctamente o no:

$inserted = DB::insert('INSERT users(id, name) VALUES(?, ?)', [1, 'John']);

Conseguir el id insertado

Para obtener el ID de la última fila insertada, puedes usar el método insert_get_id:

$last_id = DB::insert_get_id('INSERT users(id, name) VALUES(?, ?)', [1, 'John']);

No se puede hacer uso de este método en inserciones múltiples.

Actualizaciones

El método update se usa para actualizar registros en la base de datos. Retornara el numero de filas afectadas en la actualización:

DB::update('UPDATE users SET name = ? WHERE id = ?', ['Jhon', 1]);

Eliminaciones

El método delete retornara el numero de registros eliminados:

DB::update("DELETE FROM users WHERE id = ?", [1]);

Transacciones

Para poder llevar acabo una transacción en la base de datos, se pueden realizar de 2 maneras.

Por el método transaction

El método transaction ejecuta todas las operaciones dentro de una función. Si una Exception es lanzada en el momento de ejecución, el proceso se revertirá con un rollback, en caso contrario se realizara un commit:

DB::transaction(function(){
  DB::update('UPDATE users SET name = ? WHERE id = ?', ['Jhon', 1]);

  DB::delete("DELETE FROM users WHERE id = :id", ['id' => 1]);
});

Manualmente

Si deseas realizar una transacción de manera manual, la clase DB proporciona los métodos begin_transaction, commit y rollback:

DB::begin_transaction();

DB::delete("DELETE FROM users WHERE id = ?", [1]);

DB::commit();

Otros

Para ejecutar cualquier otro tipo de declaraciones SQL, puedes hacer uso del método statement. Este método solo retornara un boolean para indicar si la sentencia fue ejecutada correctamente:

$done = DB::statement('drop table users');