Поиск…
замечания
Выделение базы данных позволяет вставлять данные, общие тестовые данные в вашу базу данных. По умолчанию в DatabaseSeeder
database/seeds
имеется класс DatabaseSeeder
.
Запуск сеялок можно выполнить с помощью
php artisan db:seed
Или, если вы хотите обработать только один класс
php artisan db:seed --class=TestSeederClass
Как и во всех командах мастеров, вы имеете доступ к широкому спектру методов, которые можно найти в документации api
Вставка данных
Существует несколько способов вставки данных:
Использование DB Facade
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Визуализация модели
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Использование метода create
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
Использование фабрики
public function run()
{
factory(App\User::class, 10)->create();
}
Seeding && удаление старых данных и автоматическое добавление ресетов
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Дополнительную информацию о вставке / обновлении данных см. В примере Persisting .
Вызов других сеялок
В вашем классе DatabaseSeeder
вы можете вызвать другие сеялки
$this->call(TestSeeder::class)
Это позволяет сохранить один файл, где вы можете легко найти свои сеялки. Имейте в виду, что вам нужно обратить внимание на порядок ваших вызовов в отношении ограничений внешнего ключа. Вы не можете ссылаться на таблицу, которая еще не существует.
Создание сеялки
Чтобы создать сеялки, вы можете использовать команду make:seeder
Artisan. Все сгенерированные сеялки будут помещены в каталог database/seeds
.
$ php artisan make:seeder MoviesTableSeeder
Созданные сеялки будут содержать один метод: run
. Вы можете вставить данные в свою базу данных в этот метод.
<?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'
]);
}
}
Обычно вы хотите вызвать все ваши сеялки внутри класса DatabaseSeeder
.
Когда вы закончите писать сеялки, используйте команду db:seed
. Это run
функцию запуска DatabaseSeeder
.
$ php artisan db:seed
Вы также можете указать, чтобы запустить определенный класс сеялки для индивидуальной работы с --class
опции --class
.
$ php artisan db:seed --class=UserSeeder
Если вы хотите откат и повторить все миграции, а затем повторно:
$ php artisan migrate:refresh --seed
Команда
migrate:refresh --seed
является ярлыком для этих 3 команд:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Безопасное насыщение
Возможно, вы захотите повторно засеять свою базу данных, не затрагивая ранее созданные семена. Для этой цели вы можете использовать firstOrCreate
в своей firstOrCreate
:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Затем вы можете засеять базу данных:
php artisan db:seed
Позже, если вы хотите добавить другого сотрудника, вы можете просто добавить его в один и тот же файл:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
И снова запустите свою базу данных без проблем:
php artisan db:seed
Обратите внимание, что при первом вызове вы извлекаете запись, но ничего не делаете с ней.