Aller au contenu principal
Version: 5.x

🏗 SQL Builder

Introduction​

Bow fourni un api liĂ© Ă  la construction de requĂȘte. Avec la mĂ©thode table permet de construire une requĂȘte sql en se basant sur la nom de la table et retour une instance de Bow\Database\QueryBuilder::class.

use Bow\Database\Database

$builder = Database::table('users');
// => Instance \Bow\Database\QueryBuilder::class

Vous pouvez aussi utiliser le helper table:

$builder = table('users');

Sur l'instance de la QueryBuilder de Bow, il y a plusieurs mĂ©thodes qui vont vous permettre de construire une requĂȘte SQL. Par exemple la methode toSql qui permet d'affichez la requĂȘte construite.

$builder->toSql();
// select * from `users`

RecupĂ©rĂ© les informations​

Pour recupĂ©rer les informations avec le builder, vous devez utiliser le mĂ©thode get qui retourne une collection, first qui lui retourne null ou un objet stdclass et last qui se comporte comme first sauf qu'il retourne plutĂŽt le dernier Ă©lĂ©ment du rĂ©sultat de l'exĂ©cution de la requĂȘte.

Exemple avec get​

$builder = Database::table('users');

$users = $builder->get();

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

Notez que vous pouvez passer un tableau Ă  get qui est une liste des colonnes de la projection comme ceci $builder->get(['name']).

Exemple avec first​

$user = table('users')->first();

// Vide
is_null($user)
// Ok
echo $user->name;

Exemple avec last​

$user = $builder->last();

Ajoutez des restrictions​

Restriction simple​

Avec le builder, vous pouvez ajouter des restrictions simple sur la construction de la requĂȘte SQL avec la mĂ©thode where.

$users = table('users')->where('id', 1)->get();

$users = table('users')->where('id', '!=', 1)->get();

La clause OR​

Vous pouvez enchainer la restriction en ajoutant un or dans votre requĂȘte. La mĂ©thode orWhere vous permet de faire cela:

$users = table('users')->where('id', 1)->orWhere('name', 'Papac')->get();

Vous pouvez voir le resultat de la construction de la requĂȘte avec la mĂ©thode toSql.

$sql = table('users')->where('id', 1)->orWhere('id', 1)->toSql();
// => select * from `users` where id = 1 or id = 3;

Clauses additionnelles​

whereNull / whereNotNull​

La méthode whereNull vérifie que la valeur de la colonne donnée est NULL:

$users = table('users')->whereNull('name')->get();

La méthode whereNotNull vérifie que la valeur de la colonne n'est pas NULL:

$users = table('users')->whereNotNull('age')->get();

whereIn / whereNotIn​

La méthode whereIn vérifie que la valeur d'une colonne donnée est contenue dans le tableau donné:

$users = table('users')->whereIn('age', [27, 30])->get();

La méthode whereNotIn vérifie que la valeur de la colonne donnée n'est pas contenue dans le tableau donné:

$users = table('users')->whereNotIn('age', [27, 30])->get();

whereBetween / whereNotBetween​

La méthode whereBetween vérifie que la valeur d'une colonne est comprise entre deux valeurs:

$users = table('users')->whereBetween('votes', [1, 100])->get();

La méthode whereNotBetween vérifie que la valeur d'une colonne se situe en dehors de deux valeurs:

$users = table('users')->whereNotBetween('votes', [1, 100])->get();

Ordonner, Grouper, et limiter​

orderBy​

La mĂ©thode orderBy vous permet de trier le rĂ©sultat de la requĂȘte en fonction d'une colonne donnĂ©e. Le premier argument de la mĂ©thode orderBy devrait ĂȘtre la colonne que vous souhaitez trier, tandis que le second argument contrĂŽle le sens du tri et peut ĂȘtre asc ou desc:

$users = table('users')->orderBy('name', 'desc')->get();

groupBy et having​

Les mĂ©thodes groupBy et having peuvent ĂȘtre utilisĂ©es pour regrouper les rĂ©sultats de la requĂȘte. La signature de la mĂ©thode having est similaire Ă  celle de la mĂ©thode where:

$users = table('orders')
->groupBy('price')
->having('price', '>', 100)
->get();

jump et take​

Pour limiter le nombre de rĂ©sultats renvoyĂ©s par la requĂȘte ou pour ignorer un nombre donnĂ© de rĂ©sultats dans la requĂȘte, vous pouvez utiliser les mĂ©thodes jump (pour ignorer) et take (pour renvoyer un nombre):

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

Aggregates​

Le gĂ©nĂ©rateur de requĂȘtes fournit Ă©galement une variĂ©tĂ© de mĂ©thodes d'agrĂ©gation telles que count, max, min, avg et sum. Vous pouvez appeler n'importe laquelle de ces mĂ©thodes aprĂšs avoir construit votre requĂȘte.

$users = table('users')->count();

$price = table('orders')->max('price');

$avg = table('orders')->avg('price');

DĂ©terminer si des enregistrements existent​

Au lieu d'utiliser la mĂ©thode count pour dĂ©terminer s'il existe des enregistrements correspondant aux contraintes de votre requĂȘte, vous pouvez utiliser la mĂ©thode exists:

$exists = table('users')->where('id', 1)->exists();

SpĂ©cification d'une clause de sĂ©lection​

Bien entendu, il se peut que vous ne souhaitiez pas toujours sĂ©lectionner toutes les colonnes d'une table de base de donnĂ©es. À l'aide de la mĂ©thode select, vous pouvez spĂ©cifier une clause select personnalisĂ©e pour la requĂȘte:

$price = table('orders')->select('price')->get();
// Ou séléctionnez plusieurs colonne
$price = table('orders')->select(['id', 'price'])->get();

Insertion d'information​

Le gĂ©nĂ©rateur de requĂȘtes fournit Ă©galement une mĂ©thode insert pour insĂ©rer des enregistrements dans la table de base de donnĂ©es. La mĂ©thode insert accepte un tableau de noms de colonnes et de valeurs:

table('users')->insert(
['email' => 'exemple@gmail.com', 'age' => 27]
);

Vous pouvez mĂȘme insĂ©rer plusieurs enregistrements dans la table avec un seul appel Ă  insĂ©rer en transmettant un tableau de tableaux. Chaque tableau reprĂ©sente une ligne Ă  insĂ©rer dans la table:

Mise à jour​

Bien entendu, en plus d'insĂ©rer des enregistrements dans la base de donnĂ©es, le gĂ©nĂ©rateur de requĂȘtes peut Ă©galement mettre Ă  jour des enregistrements existants Ă  l'aide de la mĂ©thode update. La mĂ©thode update, comme la mĂ©thode insert, accepte un tableau de paires de colonnes et de valeurs contenant les colonnes Ă  mettre Ă  jour. Vous pouvez contraindre la requĂȘte de mise Ă  jour Ă  l'aide de clauses where:

table('users')->where('id', 1)->update(
['email' => 'exemple@gmail.com', 'age' => 27]
);

Supprimer un enregistrement​

Le gĂ©nĂ©rateur de requĂȘtes peut Ă©galement ĂȘtre utilisĂ© pour supprimer des enregistrements de la table via la mĂ©thode delete. Vous pouvez contraindre des instructions delete en ajoutant des clauses where avant d'appeler la mĂ©thode delete:

table('users')->delete();

table('users')->where('age', '>', 27)->delete();

Si vous souhaitez vider la table entiÚre, ce qui supprimera toutes les lignes et réinitialisera l'ID d'auto-incrémentation à zéro, vous pouvez utiliser la méthode truncate:

table('pets')->truncate();

Il manque quelque chose ?

Si vous rencontrez des problÚmes avec la documentation ou si vous avez des suggestions pour améliorer la documentation ou le projet en général, veuillez déposer une issue pour nous, ou envoyer un tweet mentionnant le compte Twitter @bowframework ou sur directement sur le github.