Aller au contenu principal
Version: 5.x

🎯 DĂ©marrage

Introduction​

Bow rend l'interaction avec les bases de donnĂ©es extrĂȘmement simple sur deux backends de bases de donnĂ©es en utilisant le SQL brut, le gĂ©nĂ©rateur de requĂȘtes courant et l'ORM Barry.

Actuellement, Bow prend en charge deux bases de données:

  • MySQL
  • SQLite

Configuration​

La configuration de la base donnée de votre application se localise dans le fihcier config/database.php. Dans ce fichier, vous pouvez définir tous les connections de votre base de donnée et un exemple en plus pour tous les supports de base de donnée est defini dans ce fichier.

SQLite Configuration​

AprÚs avoir créé une nouvelle base de données SQLite à l'aide d'une commande tel que touch var/database.sqlite, vous pouvez facilement configurer vos variables d'environnement (dans le fichier .env.json) pour qu'elles pointent vers cette base de données nouvellement créée à l'aide du chemin absolu de la base de données:

{
"DB_DEFAULT": "mysql",
"SQLITE_DATABASE": "/absolute/path/to/database.sqlite",
}

Connexion Ă  plusieur Base de donnĂ©e​

Lorsque vous utilisez plusieurs connexions, vous pouvez accéder à chaque connexion via la méthode static de connexion sur la classe Bow\Database\Database::class. Le nom transmis à la méthode de connexion doit correspondre à l'une des points de connexions répertoriées dans votre fichier de configuration config/database.php:

use Bow\Database\Database;

$users = Database::connection('mysql')->select(...);

Ou via le helper db:

$users = db('mysql')->select(...);

Une fois la configuration changé, elle est directement appliquer sur la connexion des modÚles. Cliquer ici pour plus d'information sur les models.

Utilisation de requĂȘte SQL Brute​

Les requĂȘte brute ici sont les requĂȘtes SQL Ă©crite littĂ©ralement sans passer par un Query Builder. Dans cette section nous allons utiliser une table nommer pets pour effectuer nos requĂȘte avec.

Voici la description de la table pets:

CREATE TABLE `pets` (
id int primary key,
name varchar(200),
color varchar(50)
);

Alors notre table Ă  comme colonne:

Nom de la colonneDescription
idIci la clé primaire
nameLe nom du pet
colorLa couleur du pet

Pour information, un pet c'est un animal domestique

Execution de requĂȘte Select​

Pour executer une requĂȘte brute de type SELECT nous devrez utiliser la mĂ©thode Database::select ou le helper select. On considĂšre notre table pets et que nous sommes bien connectĂ©s Ă  la base de donnĂ©e.

Execution d'un requĂȘte pour optenir tous les informations de la table pets:

use Bow\Database\Database;

$pets = Database::select('select * from `pets`');

Via helper db_select:

$pets = db_select('select * from `pets`');

SĂ©lection conditionnel​

Execution d'un requĂȘte pour optenir tous les informations de la table pets quand id Ă©gale Ă  1:

use Bow\Database\Database;

$pet = Database::select('select * from `pets` where id = :id', ['id' => 1]);

Via helper db_select:

$pet = db_select('select * from `pets` where id = :id', ['id' => 1]);

Notez que la valeur retournée par la méthode db_select est un array ou null s'il y a aucune informations. Dans le cas ou c'est un array le contenu est de type stClass (plus d'information sur stClass).

Execution de requĂȘte Insert​

Pour executer une requĂȘte brute de type INSERT nous devrez utiliser la mĂ©thode Database::insert ou le helper insert. On considĂšre toujour notre table pets et que nous sommes bien connectĂ©s Ă  la base de donnĂ©e.

Execution d'un requĂȘte pour inserer une information dans table pets:

use Bow\Database\Database;

$pet = [
'id' => 1,
'name' => 'Medor',
'color' => 'Green'
];

$inserted = Database::insert('insert into `pets` (id, name, color) values (:id, :name, :color);', $pet);

Via helper db_insert:

$pet = [
'id' => 2,
'name' => 'Mashmalo',
'color' => 'White'
];

$inserted = db_insert('insert into `pets` (id, name, color) values (:id, :name, :color);', $pet);

Notez que la valeur retournée par la méthode insert est un int ou number qui est le nombre d'insertion.

Insertion multiple​

Vous avez aussi la possibilitĂ© d'inserer plusieurs enregistrements en mĂȘme temps.

use Bow\Database\Database;

// Liste de pets
$pets = [
[
'id' => 1,
'name' => 'Medor',
'color' => 'Black'
],
[
'id' => 2,
'name' => 'Milou',
'color' => 'Gay'
]
];

$inserted = Database::insert(
'insert into `pets` (id, name, color) values (:id, :name, :color);',
$pets
);

Via helper db_insert:

$updated = db_insert(
'insert into `pets` (id, name, color) values (:id, :name, :color);',
$pets
);

Execution de requĂȘte Update​

Pour executer une requĂȘte brute de type UPDATE nous devrez utiliser la mĂ©thode Database::update ou le helper db_update. On considĂšre toujour notre table pets et que nous sommes bien connectĂ©s Ă  la base de donnĂ©e.

Execution d'un requĂȘte de mettre Ă  jour d'information dans table pets:

use Bow\Database\Database;

$pet = [
'id' => 1,
'name' => 'Medora',
'color' => 'Purple'
];

$updated = Database::update(
'update `pets` set id = :id, name = :name, color = :color where id = :id',
$pet
);

Via le helper db_update:

$pet = [
'id' => 2,
'name' => 'Spark',
'color' => 'Yellow'
];

$updated = db_update(
'update `pets` set id = :id, name = :name, color = :color where id = :id',
$pet
);

Execution de requĂȘte Delete​

Pour executer une requĂȘte brute de type DELETE nous devrez utiliser la mĂ©thode Database::delete ou le helper db_delete. On considĂšre toujour notre table pets et que nous sommes bien connectĂ©s Ă  la base de donnĂ©e.

Execution d'un requĂȘte pour inserer une information dans table pets:

use Bow\Database\Database;

$deleted = Database::delete(
'delete from `pets` where id = :id',
['id' => 1]
);

Via le helper db_delete:

$deleted = db_delete(
'delete from `pets` where id = :id',
['id' => 2]
);

Execution de requĂȘte​

Pour exĂ©cuter une requĂȘte brute autre que SELECT, UPDATE, INSERT, DELETE. Il y a une mĂ©thode faite pour Database::statement ou le helper db_statement.

use Bow\Database\Database;

Database::statement('alter table `pets` add `owner` varchar(80) default null;');

Via le helper db_statement:

db_statement('alter table `pets` add `owner` varchar(80) default null;');

Database Transactions​

Vous pouvez utiliser la méthode de startTransaction sur la classe Database pour exécuter un ensemble d'opérations dans une transaction de base de données.

Si vous passez une Closure et qu'une exception est levée dans la fonction de rappel de la transaction, la transaction sera automatiquement annulée. Si la Closure s'exécute correctement, la transaction sera automatiquement validée. Vous n'avez pas à vous soucier de l'annulation manuelle ou de la validation lorsque vous utilisez la méthode de transaction:

use Bow\Database\Database;

Database::startTransaction(function () {
Database::update('update users set votes = :votes', ['votes' => 1]);

Database::delete('delete from posts');
});

Via le helper db_transaction:

db_transaction(function () {
update('update users set votes = :votes', ['votes' => 1]);

delete('delete from posts');
});

Utilisation manuel des transaction​

Vous pouvez aussi utiliser manuelement le systÚme de transaction. Pour démarrer la transaction avec la méthode:

use Bow\Database\Database;

Database::startTransaction();
// Ou
db_transaction();

Vous pouvez annuler la transaction avec la méthode:

use Bow\Database\Database;

Database::rollback();
// Ou
db_rollback();

Vous pouvez valider la transaction avec la méthode:

use Bow\Database\Database;

Database::commit();
// Ou
db_commit();

Avec la méthode inTransaction vous pouvez vérifier si la base de donnée est en transaction:

use Bow\Database\Database;

Database::inTransaction();
// Ou
db_transaction_started();

Les jointures​

Considérons les tables suivantes:

create table `author` (
`id` int primary key,
`name` varchar(200)
);

create table `pets` (
`id` int primary key,
`name` varchar(200),
`color` varchar(50),
`author_id` int default 0
);

Pour faire une jointure dans Bow Framework c'est trÚs simple en fait. Pour ce faire on utilise la méthode join.

$results = table('pets')->join('autors', 'authors.id', 'pets.author_id')->get();

Souvant il est intĂ©ressant d'ajouter des contraintes dans la rĂ©quĂȘte normalement avec la clause WHERE.

$results = table('pets')
->join('authors', 'authors.id', 'pets.author_id')
->whereColumn('pets.author_id', 1)->get();

Normalement vous pouvez ajouter plusieur jointure dans l'appel de méthode. Pour l'exemple disons qu'il y a une autre table nommé countries qui est le pays du propriétaire et que la table authors est maintenant:

create table `author` (
`id` int primary key,
`name` varchar(200),
`country_id` int
);

Notre requĂȘte sera maintenant:

$results = table('authors')
->join('authors', 'authors.id', 'pets.author_id')
->join('countries', 'countries.id', 'pets.country_id')
->whereColumn('pets.author_id', 1)->get();

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.