Where - mayako/Spaguetti GitHub Wiki

La clase Query nos proporsiona una gran cantidad de metodos para el filtrado de nuestros datos. A continuacion se enlistan todas las variaciones, aliases y sintaxis para crear condiciones WHERE:

Condiciones directas

# SELECT * FROM users WHERE total = 100;
DB::table('users')->where('total = ?', [100]);

Igualaciones

# SELECT * FROM users WHERE id = 13 AND name = 'Jhon';
DB::table('users')->where(['id' => 13, 'name' => 'Jhon']);

# SELECT * FROM users WHERE id IN(1, 2, 3);
DB::table('users')->where(['id' => [1, 2, 3]]);

# SELECT * FROM users WHERE name IS NULL AND active = 1;
DB::table('users')->where(['name' => null, 'active' => true]);

Subqueries

# SELECT * FROM users WHERE id IN(SELECT id FROM admins);
DB::table('users')->where(['id' => DB::table('admins')->select('id')]);

Negaciones

# SELECT * FROM users WHERE NOT(total = 99);
DB::table('users')->where_not('total = ?', [99]);

# SELECT * FROM users WHERE total <> 99;
DB::table('users')->where_not(['total' => 99]);

AND y OR

Por default la funcion where agrega el operador AND, asi que la funcion and_where() es un alias de la misma.

# SELECT * FROM users WHERE id = 1;
$query = DB::table('users')->where(['id' => 1]);

# AND total = 99
$query->and_where('total = ?', [99]);

# OR total = 99
$query->or_where(['total' => 99]);

Negacion OR

# SELECT * FROM users WHERE id = 1 OR NOT(total = 99);
$query = DB::table('users')->where(['id' => 1]);

$query->or_where_not('total = ?', [99]);

Aliases

LIKE

$query->where('name like ?', ["Jhon%"]);
# ó
$query->like('name', "Jhon%");

IN

$query->where('id in(?, ?, ?)', [1, 2, 3]);
# ó
$query->where(['id' => [1, 2, 3]]);
# ó
$query->in('id', 1, 2, 3);
# ó
$query->in('id', [1, 2, 3]);

BETWEEN

$query->where('date between ? and ?', ['2016/05/12', '2016/12/06']);
# ó
$query->between("date", '2016/05/12', '2016/12/06');

IS NULL

$query->where('id IS NULL');
# ó
$query->where(['id' => null]);
# ó
$query->is_null("id");
# ó negación
$query->is_not_null("id");

Fechas

$query->date('fecha', '2016-12-05');
# ó
$query->day('fecha', '1');
# ó
$query->month('fecha', '11');
# ó 
$query->year('fecha', '2016');

Buscadores

Find

Busca registros por su ID, por estándar el nombre de la columna es id, pero este comportamiento puede cambiar, pasando como segundo argumento el nombre de la primary key:

$query->find(1) // id = 1
# ó
$query->find([1, 2]) // id in(1,2)
# ó
$query->find(12, 'id_user') // id_user = 12

Find_by

Similar al método where, a excepción que este método, solo devuelve el primer registro encontrado que cumpla con las condiciones:

$user = $query->find_by(['active' => true]);
echo $user->name;