Поиск…
Запуск сеялки
Вы можете добавить новый Seeder в класс DatabaseSeeder.
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
Чтобы запустить сеялку базы данных, используйте команду Artisan
php artisan db:seed
Это запустит класс DatabaseSeeder. Вы также можете использовать параметр --class=
чтобы вручную указать, какую сеялку следует запустить.
* Примечание. Возможно, вам понадобится запустить компоновщик dumpautoload, если ваш класс Seeder не найден. Обычно это происходит, если вы вручную создаете класс сеялки вместо использования команды artisan.
Создание семян
Семена базы данных хранятся в каталоге / database / seed. Вы можете создать семя, используя команду Artisan.
php artisan make:seed UserTableSeeder
В качестве альтернативы вы можете создать новый класс, который расширяет Illuminate\Database\Seeder
. Класс должен иметь общедоступную функцию с именем run()
.
Вставка данных с использованием сеялки
Вы можете ссылаться на модели в сеялке.
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')
]);
}
}
Вставка данных с помощью Factory Factory
Вы можете захотеть использовать фабрики моделей в своих семенах. Это создаст 3 новых пользователя.
use App\Models\User;
class UserTableSeeder extends Illuminate\Database\Seeder{
public function run(){
factory(User::class)->times(3)->create();
}
}
Вы также можете, например, указать определенные поля в своем посеве, например, пароль. Это создаст 3 пользователя с одинаковым паролем.
factory(User::class)->times(3)->create(['password' => '123456']);
Посещение MySQL Dump
Следуйте предыдущему примеру создания семени. В этом примере используется MySQL Dump для разбивки таблицы в базе данных проекта. Перед посевом должна быть создана таблица.
<?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);
}
}
Наш $ sql будет содержимым нашего дампа users.sql. Свалка должна иметь инструкцию INSERT INTO. Это зависит от вас, где вы храните свои свалки. В приведенном выше примере он сохраняется в каталоге проекта \database\seeds
. Используя вспомогательную функцию laravel database_path()
и добавьте каталог и имя файла дампа.
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)
будет выполнять вставки после запуска Seeder. Как и в предыдущих примерах, вы можете поместить UserTableSeeder
в класс DatabaseSeeder
предоставляемый laravel:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UserTableSeeder::class);
}
}
и запустить из CLI в каталоге проекта php artisan db:seed
. Или вы можете запустить Seeder для одного класса, используя php artisan db:seed --class=UsersTableSeeder
Использование faker и ModelFactories для генерации семян
1) ОСНОВНОЙ ПРОСТОЙ ПУТЬ
Приложениям, управляемым базами данных, часто требуются данные, предварительно загруженные в систему для тестирования и демонстрации.
Чтобы сделать такие данные, сначала создайте класс сеялки
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,
]);
}
}
}
Чтобы вызвать возможность выполнения класса сеялки, вы вызываете его из класса DatabaseSeeder, просто передав имя сеялки, которую вы хотите запустить:
используйте 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);
}
}
Не забудьте запустить $ composer dump-autoload
после создания Seeder, поскольку они не автоматически автоматически загружаются композитором (если только вы не создали сеялку командой artisan $ php artisan make:seeder Name
)
Теперь вы готовы к семени, запустив эту команду php artisan db:seed
2) ИСПОЛЬЗОВАНИЕ ЗАВОДОВ
Прежде всего, вы должны определить набор атрибутов по умолчанию для каждой модели в App/database/factories/ModelFactory.php
Взятие модели пользователя в качестве примера. Как выглядит 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),
];
});
Теперь создайте php artisan make:seeder UsersTableSeeder
для таблицы php artisan make:seeder UsersTableSeeder
И добавьте это
public function run()
{
factory(App\User::class, 100)->create()
}
затем добавьте это в DatabaseSeeder
public function run()
{
$this->call(UsersTableSeeder::class);
}
Это заселоет таблицу со 100 записями.