Так что я работал с семенами ларавеллы и наткнулся на эту удивительную статью о том, как их ускорить.
http://bensmith.io/speeding-up-laravel-seeders
Я проверил этот метод, и да, время посева сократилось до половины для большинства моих семян.
Единственная проблема, с которой я сталкиваюсь, также описана в том, что make()
Метод на заводе не генерирует временные метки, и некоторые из моих тестов начинают жаловаться сейчас.
Вместо того, чтобы модифицировать все мои семена, чтобы сделать их временными метками вручную, есть ли способ заставить make()
способ на фабриках сделать это для меня?
Пример семян
<?php
use Illuminate\Database\Seeder;
use Uppdragshuset\AO\Tenant\Models\CommentType;
use Uppdragshuset\AO\Tenant\Models\User;
use Uppdragshuset\AO\Tenant\Models\Document;
use Uppdragshuset\AO\Tenant\Models\Comment;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Output\ConsoleOutput;
class CommentTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$output = new ConsoleOutput;
$bar = new ProgressBar($output);
$this->command->info("Seeding Orders");
$bar->setFormat('verbose');
$bar->start();
$comment_types = CommentType::all(['id']);
$users = User::all(['id']);
$documents = Document::all(['id']);
$comments = [];
for($i = 0; $i < 50; $i++){
$bar->advance();
$comments[] = factory(Comment::class)->make([
'comment_type_id' => $comment_types->shuffle()->first()->id,
'user_id' => $users->shuffle()->first()->id,
'commentable_id' => $documents->shuffle()->first()->id,
])->toArray();
}
Comment::insert($comments);
$bar->finish();
$this->command->info("\n\r");
}
}
Так что у меня есть возможность поставить
'created_at' => Carbon\Carbon::now(),
'updated_at' => Carbon\Carbon::now(),
в семени и всех других, но есть ли лучший способ переопределить make
метод?
Задача ещё не решена.
Других решений пока нет …