diff --git a/src/Illuminate/Database/Seeder.php b/src/Illuminate/Database/Seeder.php index cac50afb579d..7079a2e27640 100755 --- a/src/Illuminate/Database/Seeder.php +++ b/src/Illuminate/Database/Seeder.php @@ -47,6 +47,10 @@ public function call($class, $silent = false, array $parameters = []) foreach ($classes as $class) { $seeder = $this->resolve($class); + if (! $seeder->shouldRun()) { + continue; + } + $name = get_class($seeder); if ($silent === false && isset($this->command)) { @@ -140,6 +144,16 @@ protected function resolve($class) return $instance; } + /** + * Determine if this seeder should run. + * + * @return bool + */ + public function shouldRun(): bool + { + return true; + } + /** * Set the IoC container instance. * diff --git a/tests/Database/DatabaseSeederTest.php b/tests/Database/DatabaseSeederTest.php index aa80f2c5f453..3c3834699d7f 100755 --- a/tests/Database/DatabaseSeederTest.php +++ b/tests/Database/DatabaseSeederTest.php @@ -45,11 +45,24 @@ public function testCallResolveTheClassAndCallsRun() $container->shouldReceive('make')->once()->with('ClassName')->andReturn($child = m::mock(Seeder::class)); $child->shouldReceive('setContainer')->once()->with($container)->andReturn($child); $child->shouldReceive('setCommand')->once()->with($command)->andReturn($child); + $child->shouldReceive('shouldRun')->once()->andReturn(true); $child->shouldReceive('__invoke')->once(); $seeder->call('ClassName'); } + public function testCallShouldntRun() + { + $seeder = new TestSeeder; + $seeder->setContainer($container = m::mock(Container::class)); + $container->shouldReceive('make')->once()->with('ClassName')->andReturn($child = m::mock(Seeder::class)); + $child->shouldReceive('setContainer')->once()->with($container)->andReturn($child); + $child->shouldReceive('shouldRun')->once()->andReturn(false); + $child->shouldNotReceive('__invoke'); + + $seeder->call('ClassName'); + } + public function testSetContainer() { $seeder = new TestSeeder;