Szukaj…
Prowadzenie siewnika
Możesz dodać nowego Seedera do klasy DatabaseSeeder.
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
Aby uruchomić siewnik bazy danych, użyj polecenia Rzemieślnik
php artisan db:seed
Spowoduje to uruchomienie klasy DatabaseSeeder. Możesz także wybrać opcję --class=
, aby ręcznie określić, który siewnik ma być uruchomiony.
* Uwaga: może być konieczne uruchomienie dumpautoload kompozytora, jeśli nie można znaleźć klasy Seeder. Zwykle dzieje się tak, jeśli ręcznie utworzysz klasę siewnika zamiast używać polecenia rzemieślnika.
Tworzenie nasienia
Ziarna bazy danych są przechowywane w katalogu / database / seeds. Możesz stworzyć ziarno za pomocą polecenia Rzemieślnika.
php artisan make:seed UserTableSeeder
Alternatywnie możesz utworzyć nową klasę, która rozszerza Illuminate\Database\Seeder
. Klasa musi mieć funkcję publiczną o nazwie run()
.
Wstawianie danych za pomocą Seedera
Możesz odwoływać się do modeli w siewniku.
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')
]);
}
}
Wstawianie danych za pomocą fabryki modeli
Możesz użyć Fabryki Modelów w swoich nasionach. Spowoduje to utworzenie 3 nowych użytkowników.
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
factory(User::class)->times(3)->create();
}
}
Możesz także na przykład zdefiniować określone pola w twoim seedingu jak hasło. Spowoduje to utworzenie 3 użytkowników z tym samym hasłem.
factory(User::class)->times(3)->create(['password' => '123456']);
Wysiew z MySQL Dump
Postępuj zgodnie z poprzednim przykładem tworzenia zarodka. W tym przykładzie użyto zrzutu MySQL do zaszczepienia tabeli w bazie danych projektu. Tabela musi zostać utworzona przed zaszczepieniem.
<?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);
}
}
Nasze $ sql będzie zawartością zrzutu zrzutu users.sql. Zrzut powinien mieć instrukcję INSERT INTO. To od Ciebie zależy, gdzie będziesz przechowywać swoje zrzuty. W powyższym przykładzie jest on przechowywany w katalogu projektu \database\seeds
. Korzystanie z funkcji pomocniczej laravel database_path()
i dołączanie nazwy katalogu i pliku zrzutu.
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)
wykona wstawki po uruchomieniu Seedera. Podobnie jak w poprzednich przykładach, możesz umieścić UserTableSeeder
w klasie DatabaseSeeder
dostarczonej przez laravel:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
}
i uruchom z CLI w katalogu projektu php artisan db:seed
. Lub możesz uruchomić Seedera dla pojedynczej klasy, używając php artisan db:seed --class=UsersTableSeeder
Używanie faker i ModelFactories do generowania nasion
1) PODSTAWOWY PROSTY SPOSÓB
Aplikacje oparte na bazie danych często potrzebują danych wstępnie zaszczepionych w systemie do celów testowych i demonstracyjnych.
Aby utworzyć takie dane, najpierw utwórz klasę siewnika
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,
]);
}
}
}
Aby wywołać możliwość wykonania klasy seeder, wywołujesz ją z klasy DatabaseSeeder, po prostu przekazując nazwę sedera, który chcesz uruchomić:
użyj 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);
}
}
Nie zapomnij uruchomić $ composer dump-autoload
po utworzeniu Seedera, ponieważ nie są one automatycznie ładowane automatycznie przez kompozytora (chyba że utworzyłeś siewnik za pomocą polecenia rzemieślnika $ php artisan make:seeder Name
)
Teraz jesteś gotowy do uruchomienia, uruchamiając polecenie php artisan db:seed
2) KORZYSTANIE Z Fabryk Modelowych
Przede wszystkim należy zdefiniować domyślny zestaw atrybutów dla każdego modelu w App/database/factories/ModelFactory.php
Biorąc model użytkownika za przykład, tak wygląda ModelFactory
$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),
];
});
Teraz stwórz siewnik stołowy php artisan make:seeder UsersTableSeeder
I dodaj to
public function run()
{
factory(App\User::class, 100)->create()
}
następnie dodaj to do DatabaseSeeder
public function run()
{
$this->call(UsersTableSeeder::class);
}
To zapełni tabelę 100 rekordami.