> For the complete documentation index, see [llms.txt](https://ajgallego.gitbook.io/laravel-5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ajgallego.gitbook.io/laravel-5/capitulo_3/base_de_datos_query_builder.md).

# Constructor de consultas

Laravel incluye una serie de clases que nos facilita la construcción de consultas y otro tipo de operaciones con la base de datos. Además, al utilizar estas clases, creamos una notación mucho más legible, compatible con todos los tipos de bases de datos soportados por Laravel y que nos previene de cometer errores o de ataques por inyección de código SQL.

## Consultas

Para realizar una "Select" que devuelva todas las filas de una tabla utilizaremos el siguiente código:

```php
$users = DB::table('users')->get();

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

En el ejemplo se utiliza el constructor `DB::tabla` indicando el nombre de la tabla sobre la que se va a realizar la consulta, y por último se llama al método `get()` para obtener todas las filas de la misma.

Si queremos obtener un solo elemento podemos utilizar `first` en lugar de `get`, de la forma:

```php
$user = DB::table('users')->first();

echo $user->name;
```

## Clausula *where*

Para filtrar los datos usamos la clausula `where`, indicando el nombre de la columna y el valor a filtrar:

```php
$user = DB::table('users')->where('name', 'Pedro')->get();

echo $user->name;
```

En este ejemplo, la clausula `where` filtrará todas las filas cuya columna `name` sea igual a `Pedro`. Si queremos realizar otro tipo de filtrados, como columnas que tengan un valor mayor (`>`), mayor o igual (`>=`), menor (`<`), menor o igual (`<=`), distinto del indicado (`<>`) o usar el operador `like`, lo podemos indicar como segundo parámetro de la forma:

```php
$users = DB::table('users')->where('votes', '>', 100)->get();

$users = DB::table('users')->where('status', '<>', 'active')->get();

$users = DB::table('users')->where('name', 'like', 'T%')->get();
```

Si añadimos más clausulas `where` a la consulta por defecto se unirán mediante el operador lógico `AND`. En caso de que queramos utilizar el operador lógico `OR` lo tendremos que realizar usando `orWhere` de la forma:

```php
$users = DB::table('users')
                    ->where('votes', '>', 100)
                    ->orWhere('name', 'Pedro')
                    ->get();
```

## orderBy / groupBy / having\_

También podemos utilizar los métodos `orderBy`, `groupBy` y `having` en las consultas:

```php
$users = DB::table('users')
                    ->orderBy('name', 'desc')
                    ->groupBy('count')
                    ->having('count', '>', 100)
                    ->get();
```

## *Offset / Limit*

Si queremos indicar un *offset* o *limit* lo realizaremos mediante los métodos `skip` (para el *offset*) y `take` (para *limit*), por ejemplo:

```php
$users = DB::table('users')->skip(10)->take(5)->get();
```

## Transacciones

Laravel también permite crear transacciones sobre un conjunto de operaciones:

```php
DB::transaction(function()
{
    DB::table('users')->update(array('votes' => 1));

    DB::table('posts')->delete();
});
```

En caso de que se produzca cualquier excepción en las operaciones que se realizan en la transacción se desharían todos los cambios aplicados hasta ese momento de forma automática.

## Más informacion

Para más información sobre la construcción de *Querys* (*join, insert, update, delete*, agregados, etc.) podéis consultar la documentación de Laravel en su sitio web:

<http://laravel.com/docs/5.7/queries>
