Пакет Laragear Populate від @DarkGhostHunter – це вдосконалений сідер для застосунків на Laravel. Він пропонує корисні функції поверх стандартної системи заповнення бази даних у Laravel, включаючи можливість продовження невдалих спроб заповнення:
Модифікувавши стандартний Seeder з покращеною версією, ми можемо підвищити ефективність системи заповнення, реалізуючи покрокове заповнення, пропуск та можливість продовження заповнювальних процесів без втрати звичних функцій, забезпечуючи сумісність з класичними класами заповнювачів.
Сідери Populate використовують кроки заповнення, які представлені публічним методом, що починається з seed
, або методом з атрибутом SeedStep
. Це означає, що ваш сідер може бути більш організованим відповідно до типу даних, які ви хочете заповнити. Наступний приклад з README пакета демонструє кілька методів, які будуть викликані, а також можливість використання залежнісного вприскування:
namespace Database\Seeders;
use Database\Factories\UserFactory;
use Laragear\Populate\Attributes\SeedStep;
use Laragear\Populate\Seeder;
use App\TicketGenerator;
class UserSeeder extends Seeder
{
public function __construct(protected TicketGenerator $ticket)
{
// ...
}
public function seedNormalUsers(UserFactory $users)
{
$users->count(5)->create(['ticket' => $this->ticket->generate()]);
}
public function seedVipUsers(UserFactory $users)
{
$users->vip()->count(3)->create();
}
#[SeedStep]
public function bannedUsers(UserFactory $users)
{
$users->banned()->count(2)->create(['ticket' => $this->ticket->generate()]);
}
}
Окрім виконання кроків заповнення, сідери, що використовують Populate, можуть визначати методи before()
, after()
, onError()
, а також користуватися методом skip()
під час виклику before()
для пропуску кроку заповнення на основі знайдених умов:
if (User::query()->banned()->exists()) {
$this->skip();
}
У README пакета міститься детальна документація про всі можливості сідерів Laragear Populate. Ви можете дізнатися більше про цей пакет, отримати повні інструкції з установки та переглянути код на GitHub.