Nous avons vu précédemment comment modifier la structure d'une base. Nous allons voir maintenant comment gérer les enregistrements.
Des tables d'exemple
Pour expérimenter la gestion des enregistrements nous allons avoir besoin de tables. Nous allons utiliser ce que nous avons vu la dernière fois pour créer deux tables. Créons une migration pour une table auteurs et une table livres :
Le code pour la migration de la table des auteurs app/database/migrations/2013_01_24_195027_create_auteurs.php (évidemment vous aurez des références différentes):
class CreateAuteurs extends Migration { public function up() { Schema::create('auteurs', function($table) { $table->increments('id'); $table->string('nom', 50); $table->string('prenom', 50); $table->date('naissance'); }); } public function down() { Schema::drop('auteurs'); } }
Le code pour la migration de la table des livres app/database/migrations/2013_01_24_195231_create_livres.php (évidemment vous aurez là aussi des références différentes):
class CreateLivres extends Migration { public function up() { Schema::create('livres', function($table) { $table->increments('id'); $table->string('titre', 50); $table->integer('id_auteur'); }); } public function down() { Schema::drop('livres'); } }Et enfin nous faisons la migration :
Insertion de données
Nos tables sont un peu vides, nous allons maintenant les remplir. Créons des auteurs. Pour insérer un seul enregistrement la syntaxe est la suivante :
DB::table('auteurs')->insert( array('nom' => 'Flaubert', 'prenom' => 'Gustave', 'naissance' => '1821-12-12') );
Pour en insérer plusieurs il faut faire un tableau global (là j'ai dû un peu fouiller dans le code parce que l'exemple de la documentation est incorrect, ça fait partie des plaisirs des framework en version beta ) :
DB::table('auteurs')->insert( array( array('nom' => 'Raspail', 'prenom' => 'Jean', 'naissance' => '1929-01-24'), array('nom' => 'Avril', 'prenom' => 'Nicole', 'naissance' => '1939-08-15'), array('nom' => 'Pinger', 'prenom' => 'Robert', 'naissance' => '1919-07-19'), array('nom' => 'Sibran', 'prenom' => 'Anne', 'naissance' => '1963-02-04'), array('nom' => 'Saulers', 'prenom' => 'Pilippe', 'naissance' => '1969-06-12'), array('nom' => 'July', 'prenom' => 'Serge', 'naissance' => '1942-12-27') ) );
Pour tester ce code vous pouvez le faire directement dans une route. Ce n'est pas très joli mais parfait pour un test. Normalement ça devrait fonctionner :
Notez que la méthode insert renvoie true si l'insertion s'est bien effectuée. On va aussi entrer quelques livres :DB::table('livres')->insert( array( array('titre' => 'Secouons le cocotier', 'id_auteur' => '2'), array('titre' => 'Pêcheurs de Lune', 'id_auteur' => '2'), array('titre' => 'Les Royaumes de Borée', 'id_auteur' => '2'), array('titre' => 'Le Quartier évanoui', 'id_auteur' => '5'), array('titre' => 'Hugo et les Lapins', 'id_auteur' => '5'), array('titre' => 'Le Salon des artistes', 'id_auteur' => '7') ) );
Sélectionner des données
Maintenant que nous avons des données nous allons voir comment en sélectionner certaines. Commençons par quelque chose de simple en sélectionnant tous les enregistrements d'une table :
$auteurs = DB::table('auteurs')->get(); var_dump($auteurs);
On obtient un tableau avec toutes les données sous forme d'objets :
array (size=7) 0 => object(stdClass)[118] public 'id' => int 1 public 'nom' => string 'Flaubert' (length=8) public 'prenom' => string 'Gustave' (length=7) public 'naissance' => string '1821-12-12' (length=10) 1 => object(stdClass)[119] public 'id' => int 2 public 'nom' => string 'Raspail' (length=7) public 'prenom' => string 'Jean' (length=4) public 'naissance' => string '1929-01-24' (length=10) 2 => object(stdClass)[120] public 'id' => int 3 public 'nom' => string 'Avril' (length=5) public 'prenom' => string 'Nicole' (length=6) public 'naissance' => string '1939-08-15' (length=10) 3 => object(stdClass)[121] public 'id' => int 4 public 'nom' => string 'Pinger' (length=6) public 'prenom' => string 'Robert' (length=6) public 'naissance' => string '1919-07-19' (length=10) 4 => object(stdClass)[122] public 'id' => int 5 public 'nom' => string 'Sibran' (length=6) public 'prenom' => string 'Anne' (length=4) public 'naissance' => string '1963-02-04' (length=10) 5 => object(stdClass)[123] public 'id' => int 6 public 'nom' => string 'Saulers' (length=7) public 'prenom' => string 'Pilippe' (length=7) public 'naissance' => string '1969-06-12' (length=10) 6 => object(stdClass)[124] public 'id' => int 7 public 'nom' => string 'July' (length=4) public 'prenom' => string 'Serge' (length=5) public 'naissance' => string '1942-12-27' (length=10)Si on veut affiner la sélection il faut utiliser une clause where :
$auteurs = DB::table('auteurs')->where('nom', 'Pinger')->get(); var_dump($auteurs);
array (size=1) 0 => object(stdClass)[118] public 'id' => int 4 public 'nom' => string 'Pinger' (length=6) public 'prenom' => string 'Robert' (length=6) public 'naissance' => string '1919-07-19' (length=10)
Si on sélectionne plusieurs enregistrements et qu'on désire seulement le premier :
$auteurs = DB::table('auteurs')->where('nom', '>', 'r')->first(); var_dump($auteurs);
object(stdClass)[118] public 'id' => int 2 public 'nom' => string 'Raspail' (length=7) public 'prenom' => string 'Jean' (length=4) public 'naissance' => string '1929-01-24' (length=10)Si on veut juste une colonne d'un enregistrement :
$auteurs = DB::table('auteurs')->where('id', 2)->pluck('nom'); var_dump($auteurs);
string 'Raspail' (length=7)Si on veut seulement certaines colonnes :
$auteurs = DB::table('auteurs')->select('nom', 'prenom')->where('nom', '>', 'r')->get(); var_dump($auteurs);
array (size=3) 0 => object(stdClass)[118] public 'nom' => string 'Raspail' (length=7) public 'prenom' => string 'Jean' (length=4) 1 => object(stdClass)[119] public 'nom' => string 'Sibran' (length=6) public 'prenom' => string 'Anne' (length=4) 2 => object(stdClass)[120] public 'nom' => string 'Saulers' (length=7) public 'prenom' => string 'Pilippe' (length=7)Combiner des clauses where :
$auteurs = DB::table('auteurs')->where('naissance', '<' , '1900-01-01') ->orWhere('naissance', '>' , '1960-01-01') ->get(); var_dump($auteurs);
array (size=3) 0 => object(stdClass)[118] public 'id' => int 1 public 'nom' => string 'Flaubert' (length=8) public 'prenom' => string 'Gustave' (length=7) public 'naissance' => string '1821-12-12' (length=10) 1 => object(stdClass)[119] public 'id' => int 5 public 'nom' => string 'Sibran' (length=6) public 'prenom' => string 'Anne' (length=4) public 'naissance' => string '1963-02-04' (length=10) 2 => object(stdClass)[120] public 'id' => int 6 public 'nom' => string 'Saulers' (length=7) public 'prenom' => string 'Pilippe' (length=7) public 'naissance' => string '1969-06-12' (length=10)Une valeur dans un intervalle :
$auteurs = DB::table('auteurs')->whereBetween('naissance', array('1930-01-01', '1960-01-01'))->get(); var_dump($auteurs);
array (size=2) 0 => object(stdClass)[118] public 'id' => int 3 public 'nom' => string 'Avril' (length=5) public 'prenom' => string 'Nicole' (length=6) public 'naissance' => string '1939-08-15' (length=10) 1 => object(stdClass)[119] public 'id' => int 7 public 'nom' => string 'July' (length=4) public 'prenom' => string 'Serge' (length=5) public 'naissance' => string '1942-12-27' (length=10)Ordonner le résultat :
$auteurs = DB::table('auteurs')->select('nom')->orderBy('nom', 'desc')->get(); var_dump($auteurs);
array (size=7) 0 => object(stdClass)[118] public 'nom' => string 'Sibran' (length=6) 1 => object(stdClass)[119] public 'nom' => string 'Saulers' (length=7) 2 => object(stdClass)[120] public 'nom' => string 'Raspail' (length=7) 3 => object(stdClass)[121] public 'nom' => string 'Pinger' (length=6) 4 => object(stdClass)[122] public 'nom' => string 'July' (length=4) 5 => object(stdClass)[123] public 'nom' => string 'Flaubert' (length=8) 6 => object(stdClass)[124] public 'nom' => string 'Avril' (length=5)Utiliser un offset et une limite :
$auteurs = DB::table('auteurs')->select('nom')->skip(3)->take(2)->get(); var_dump($auteurs);
array (size=2) 0 => object(stdClass)[118] public 'nom' => string 'Pinger' (length=6) 1 => object(stdClass)[119] public 'nom' => string 'Sibran' (length=6)Il existe encore bien d'autres possibilités et je vous renvoie à la documentation.
Les jointures
Il arrive souvent qu'on doive utiliser des jointures lorsque deux (ou plusieurs) tables sont concernées. Voici un exemple :
$livres = DB::table('livres') ->join('auteurs', 'auteurs.id', '=', 'livres.id_auteur') ->where('nom', '=', 'Raspail') ->select('titre') ->get(); var_dump($livres);
array (size=3) 0 => object(stdClass)[119] public 'titre' => string 'Secouons le cocotier' (length=20) 1 => object(stdClass)[120] public 'titre' => string 'Pêcheurs de Lune' (length=17) 2 => object(stdClass)[121] public 'titre' => string 'Les Royaumes de Borée' (length=22)
Mise à jour et suppression d'enregistrements
Voyons à présent une mise à jour :$livres = DB::table('livres') ->where('titre', '=', 'Pêcheurs de Lune') ->update(array('id_auteur' => 3)); var_dump($livres);
int 1On a au retour le nombre d'enregistrement affectés. Dans notre cas un seul. Voyons une suppression :
$livres = DB::table('livres')->where('id_auteur', '=', 5)->delete(); var_dump($livres);
int 2
On a aussi au retour le nombre d'enregistrements affectés. Ici 2 puisque nous avons supprimé les deux ouvrages d'Anne Sibran :
Je vous renvoie à la documentation pour toutes les informations complémentaires. Mais surtout n'oubliez pas qu'elle est encore en évolution .Par bestmomo
Nombre de commentaires : 5