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.
transaction
Por el método 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');