Sök…
Anmärkningar
Med sådd av databaser kan du infoga data, allmänna testdata i din databas. Som standard finns det en DatabaseSeeder
klass under database/seeds
.
Löpande såmaskiner kan göras med
php artisan db:seed
Eller om du bara vill bearbeta en enda klass
php artisan db:seed --class=TestSeederClass
Som med alla hantverkskommandon, har du tillgång till ett brett utbud av metoder som finns i api-dokumentationen
Infoga data
Det finns flera sätt att infoga data:
Använda DB-fasaden
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Via Instantiating a Model
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Med hjälp av skapa-metoden
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
Använda fabriken
public function run()
{
factory(App\User::class, 10)->create();
}
Seeding && radera gamla data och återställa automatisk inkrement
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Se Persisting- exemplet för mer information om infoga / uppdatera data.
Ringer andra såmaskiner
Inom din DatabaseSeeder
klass kan du ringa andra såmaskiner
$this->call(TestSeeder::class)
Detta gör att du kan hålla en fil där du enkelt kan hitta dina såmaskiner. Tänk på att du måste vara uppmärksam på ordningen på dina samtal när det gäller utländska nyckelbegränsningar. Du kan inte referera till en tabell som inte finns ännu.
Skapa en Seeder
För att skapa såmaskiner kan du använda kommandot make:seeder
Artisan. Alla fräsar som genereras kommer att placeras i database/seeds
.
$ php artisan make:seeder MoviesTableSeeder
Genererade såmaskiner kommer att innehålla en metod: run
. Du kan infoga data i din databas på den här metoden.
<?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'
]);
}
}
Vanligtvis vill du ringa alla dina såmaskiner i klassen DatabaseSeeder
.
När du är klar med att skriva seeders använder du kommandot db:seed
. Detta kommer att köra DatabaseSeeder
's run
funktion.
$ php artisan db:seed
Du kan också specificera för att köra en specifik seederklass för att köra individuellt med alternativet --class
.
$ php artisan db:seed --class=UserSeeder
Om du vill rulla tillbaka och köra om alla migreringar och sedan resa:
$ php artisan migrate:refresh --seed
Kommandot
migrate:refresh --seed
är en genväg till dessamigrate:refresh --seed
kommandon:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Säker nyinläggning
Du kanske vill sätta ny databas utan att påverka dina tidigare skapade frön. För detta ändamål kan du använda firstOrCreate
i din seeder:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Sedan kan du se till databasen:
php artisan db:seed
Senare, om du vill lägga till en annan typ av anställd, kan du bara lägga till den nya i samma fil:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
Och frö din databas igen utan problem:
php artisan db:seed
Lägg märke till i det första samtalet du hämtar posten men gör ingenting med det.