Zoeken…
Een zaaimachine runnen
U kunt uw nieuwe Seeder toevoegen aan de klasse DatabaseSeeder.
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
Gebruik de opdracht Artisan om een database-seeder uit te voeren
php artisan db:seed
Hiermee wordt de klasse DatabaseSeeder uitgevoerd. U kunt er ook voor kiezen om de optie --class=
gebruiken om handmatig aan te geven welke seeder moet worden uitgevoerd.
* Let op, misschien moet u componist dumpautoload uitvoeren als uw Seeder-klasse niet kan worden gevonden. Dit gebeurt meestal als u handmatig een seeder-klasse maakt in plaats van de artisanale opdracht te gebruiken.
Een zaadje maken
Database-zaden worden opgeslagen in de map / database / zaden. Je kunt een seed maken met een Artisan-commando.
php artisan make:seed UserTableSeeder
Als alternatief kunt u een nieuwe klasse maken die de Illuminate\Database\Seeder
uitbreidt. De klasse moet een openbare functie met de naam run()
.
Gegevens invoegen met een zaaimachine
U kunt verwijzen naar modellen in een seeder.
use DB;
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
# Remove all existing entrie
DB::table('users')->delete() ;
User::create([
'name' => 'Admin',
'email' => '[email protected]',
'password' => Hash::make('password')
]);
}
}
Gegevens invoegen met een Model Factory
Misschien wilt u Modelfabrieken in uw zaden gebruiken. Hiermee worden 3 nieuwe gebruikers gemaakt.
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
factory(User::class)->times(3)->create();
}
}
Misschien wilt u ook specifieke velden in uw seeding definiëren, bijvoorbeeld een wachtwoord. Hiermee worden 3 gebruikers met hetzelfde wachtwoord gemaakt.
factory(User::class)->times(3)->create(['password' => '123456']);
Zaaien met MySQL Dump
Volg het vorige voorbeeld van het maken van een seed. In dit voorbeeld wordt een MySQL-dump gebruikt om een tabel in de projectdatabase te zaaien. De tabel moet vóór het zaaien worden gemaakt.
<?php
use Illuminate\Database\Seeder;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$sql = file_get_contents(database_path() . '/seeds/users.sql');
DB::statement($sql);
}
}
Onze $ sql wordt de inhoud van de dump van onze users.sql. De dump moet een INSERT INTO-instructie hebben. Het is aan jou waar je je dumps opslaat. In het bovenstaande voorbeeld wordt het opgeslagen in de projectmap \database\seeds
. Gebruik de helperfunctie database_path()
laravel en voeg de map en de bestandsnaam van de dump toe.
INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');
DB::statement($sql)
zal de inserts uitvoeren zodra de Seeder is uitgevoerd. Net als in vorige voorbeelden kunt u de UserTableSeeder
in de klasse DatabaseSeeder
van laravel plaatsen:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
}
en voer CLI uit in de projectmap php artisan db:seed
. Of u kunt de Seeder voor een enkele klasse uitvoeren met php artisan db:seed --class=UsersTableSeeder
Faker en ModelFactories gebruiken om zaden te genereren
1) BASIS EENVOUDIGE MANIER
Database-gestuurde applicaties hebben vaak gegevens nodig die vooraf in het systeem zijn geplaatst voor test- en demo-doeleinden.
Maak eerst de seeder-klasse om dergelijke gegevens te maken
ProductTableSeeder
use Faker\Factory as Faker;
use App\Product;
class ProductTableSeeder extends DatabaseSeeder {
public function run()
{
$faker = $this->getFaker();
for ($i = 0; $i < 10; $i++)
{
$name = $faker->word;
$image = $faker->imageUrl;
Modelname::create([
'name' => $name,
'image' => $image,
]);
}
}
}
Om een seeder-klasse uit te voeren, moet u deze vanuit de klasse DatabaseSeeder aanroepen, gewoon door de naam van de seeder die u wilt uitvoeren door te geven:
gebruik Illuminate \ Database \ Seeder;
class DatabaseSeeder extends Seeder {
protected $faker;
public function getFaker() {
if (empty($this->faker)) {
$faker = Faker\Factory::create();
$faker->addProvider(new Faker\Provider\Base($faker));
$faker->addProvider(new Faker\Provider\Lorem($faker));
}
return $this->faker = $faker;
}
public function run() {
$this->call(ProductTableSeeder::class);
}
}
Vergeet niet om $ composer dump-autoload
nadat u de seeder hebt gemaakt, omdat ze niet automatisch door de componist worden automatisch geladen (tenzij u seeder hebt gemaakt met het artisanale commando $ php artisan make:seeder Name
)
Nu ben je klaar om te zaaien door dit artisanale commando php artisan db:seed
2) GEBRUIK VAN Modelfabrieken
Allereerst moet u een standaardset kenmerken definiëren voor elk model in de App/database/factories/ModelFactory.php
Een voorbeeld van een gebruikersmodel, zo ziet een modelfabriek eruit
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
Maak nu een tabel seeder php artisan make:seeder UsersTableSeeder
En voeg dit toe
public function run()
{
factory(App\User::class, 100)->create()
}
voeg dit vervolgens toe aan de DatabaseSeeder
public function run()
{
$this->call(UsersTableSeeder::class);
}
Dit zal de tabel met 100 records zaaien.