Recherche…
Remarques
L'ensemencement de base de données vous permet d'insérer des données, des données de test générales dans votre base de données. Par défaut, il existe une classe DatabaseSeeder
sous database/seeds
.
Les semoirs en cours d'exécution peuvent être faits avec
php artisan db:seed
Ou si vous voulez seulement traiter une seule classe
php artisan db:seed --class=TestSeederClass
Comme pour toutes les commandes artisanales, vous avez accès à un large éventail de méthodes disponibles dans la documentation de l' API.
Insérer des données
Il existe plusieurs manières d’insérer des données:
Utiliser la façade DB
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Via l'instanciation d'un modèle
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Utiliser la méthode create
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
En utilisant l'usine
public function run()
{
factory(App\User::class, 10)->create();
}
Amorçage && suppression d'anciennes données et réinitialisation de l'incrémentation automatique
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Voir l'exemple persistant pour plus d'informations sur l'insertion / mise à jour des données.
Appeler d'autres semoirs
Dans votre classe DatabaseSeeder
, vous pouvez appeler d’autres
$this->call(TestSeeder::class)
Cela vous permet de garder un fichier où vous pouvez facilement trouver vos semoirs. Gardez à l'esprit que vous devez faire attention à l'ordre de vos appels concernant les contraintes de clés étrangères. Vous ne pouvez pas référencer un tableau qui n'existe pas encore.
Créer un semoir
Pour créer des semoirs, vous pouvez utiliser la commande make:seeder
Artisan. Tous les semoirs générés seront placés dans le répertoire database/seeds
.
$ php artisan make:seeder MoviesTableSeeder
Les semences générées contiendront une méthode: run
. Vous pouvez insérer des données dans votre base de données avec cette méthode.
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class MoviesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
App\Movie::create([
'name' => 'A New Hope',
'year' => '1977'
]);
App\Movie::create([
'name' => 'The Empire Strikes Back',
'year' => '1980'
]);
}
}
Vous voudrez généralement appeler tous vos classeurs dans la classe DatabaseSeeder
.
Une fois que vous avez fini d'écrire les graisseurs, utilisez la commande db:seed
. Cela se déroulera DatabaseSeeder
de run
fonction.
$ php artisan db:seed
Vous pouvez également spécifier d'exécuter une classe de --class
spécifique pour s'exécuter individuellement à l'aide de l'option --class
.
$ php artisan db:seed --class=UserSeeder
Si vous souhaitez restaurer et réexécuter toutes les migrations, puis ré-émettre:
$ php artisan migrate:refresh --seed
La commande
migrate:refresh --seed
est un raccourci vers ces 3 commandes:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Réensemencement sûr
Vous voudrez peut-être redéposer votre base de données sans affecter vos graines déjà créées. Pour cela, vous pouvez utiliser firstOrCreate
dans votre semoir:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Ensuite, vous pouvez amorcer la base de données:
php artisan db:seed
Plus tard, si vous souhaitez ajouter un autre type d’employé, vous pouvez simplement l’ajouter dans le même fichier:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
Et semer à nouveau votre base de données sans aucun problème:
php artisan db:seed
Notez dans le premier appel que vous récupérez l'enregistrement mais ne faites rien avec lui.