Подскажите как можно отрефакторить код
Вроде все работает. Подскажите, как можно поправить код, где отрефакторить?
<?php
declare(strict_types = 1);
namespace Dummy;
use Illuminate\Database\Seeder;
use Database\Seeds\SequenceTrait;
use App\Models\ColdModule\ColdCustomer;
use App\Models\Tag;
class TagSeeder extends Seeder
{
use SequenceTrait;
protected $taggable = [];
/**
* Prepare all taggable classes
*
* @return void
*/
public function __construct()
{
$this->taggable = [
new ColdCustomer,
];
}
/**
* Auto generated seed file.
*
* @return void
*/
public function run(): void
{
$table = new Tag;
$tableName = $table->getTable();
\DB::table($tableName)->delete();
for ($i = 0; $i < 50; $i++) {
factory(Tag::class)->create($this->getTaggable());
}
$this->setSequence($tableName);
}
/**
* Return a randomized Model taggables.
*
* @return array
*/
protected function getTaggable(): array
{
$rand = array_rand($this->taggable);
$model = $this->taggable[$rand];
$ids = $model->pluck('id')->toArray();
$type = get_class($model);
return [
'taggable_id' => array_rand($ids),
'taggable_type' => $type,
];
}
}
Ответы (1 шт):
Я бы поступил следующим образом:
Создал бы файл TaggableFactory в папке factories с содержимым для заполнения таблицы
$factory->define(Tag::class, function (Faker $faker) {
$taggable = [
new ColdCustomer,
];
$rand = array_rand($taggable);
$model = $taggable[$rand];
$ids = $model->pluck('id')->toArray();
$type = get_class($model);
return [
'taggable_id' => array_rand($ids),
'taggable_type' => $type,
];
});
После чего, в TagSeeder
public function run(): void {
factory(Tag::class, 50)->create();
}
В функции factory вторым параметром передается значение сколько вам нужно создать строк в базе.
Если вы запускаете seeder с помощью php artisan db:seed, то в DatabaseSeeder в методе run добавить строку $this->call(TagSeeder::class);
Как видите я убрал очищение таблицы Tag, с помощью команды php artisan migrate:refresh --seed, данная команда сделает рестарт всех ваших миграций + заполнит новыми данными, но если вам нужно будет все таки удалять строки из таблицы используйте Tag::truncate();