Skip to content

Commit f2f1169

Browse files
committed
feat: add support for in-model seeders
1 parent 767bdf3 commit f2f1169

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

src/Schema.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,11 +290,12 @@ public static function seed(string $fileToSeed): bool
290290
$data = Yaml::parseFile($fileToSeed);
291291
$tableName = str_replace('.yml', '', path($fileToSeed)->basename());
292292

293+
$seeds = $data['seeds'] ?? [];
293294
$currentConnection = $data['connection'] ?? null;
294295

295-
$seeds = $data['seeds'] ?? [];
296296
$count = $seeds['count'] ?? 1;
297297
$seedsData = $seeds['data'] ?? [];
298+
$seedsModel = $seeds['model'] ?? null;
298299

299300
$timestamps = $data['timestamps'] ?? true;
300301
$softDeletes = $data['softDeletes'] ?? false;
@@ -306,7 +307,25 @@ public static function seed(string $fileToSeed): bool
306307
static::$connection::table($tableName, null, $currentConnection)->truncate();
307308
}
308309

309-
if (is_array($seedsData[0] ?? null)) {
310+
if (empty($seedsData) && !$seedsModel) {
311+
$seedsModel = \Illuminate\Support\Str::studly(
312+
\Illuminate\Support\Str::singular($tableName)
313+
);
314+
}
315+
316+
if ($seedsModel) {
317+
if (strpos($seedsModel, 'App\Models') === false) {
318+
$seedsModel = "App\Models\\$seedsModel";
319+
}
320+
321+
if (!class_exists($seedsModel)) {
322+
throw new \Exception("The model $seedsModel does not exist");
323+
}
324+
325+
for ($i = 0; $i < $count; $i++) {
326+
$finalDataToSeed[] = $seedsModel::__seeder();
327+
}
328+
} else if (is_array($seedsData[0] ?? null)) {
310329
$finalDataToSeed = $seedsData;
311330
} else {
312331
for ($i = 0; $i < $count; $i++) {

0 commit comments

Comments
 (0)