For some of my tables, I’d like to insert a fixed amount of rows with specific data.
This is my categories factory:
$factory->define(Category::class, function (Faker $faker) { return [ [ 'name' => 'Politics', 'slug' => 'politics', 'description' => 'To discuss politics' ], [ 'name' => 'News and Events', 'slug' => 'news', 'description' => 'To discuss news and world events' ], [ 'name' => 'Food and Cooking', 'slug' => 'cooking', 'description' => 'To discuss cooking and food' ], [ 'name' => "Animals and Nature", 'slug' => 'animals-nature', 'description' => 'To discuss politics' ] ]; });
This is the seeder:
public function run() { factory(AppCategory::class, 1)->create(); }
I get this error: preg_match() expects parameter 2 to be string, array given
Is there a way to insert a fixed amount of static information into certain tables using seeding and factories?
Advertisement
Answer
I think you want to use Seeder with static values, if I am correct you should use
Define Category seeder
<?php use IlluminateDatabaseSeeder; use AppCategory; class CategorySeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $categories = [ [ 'name' => 'Politics', 'slug' => 'politics', 'description' => 'To discuss politics' ], [ 'name' => 'News and Events', 'slug' => 'news', 'description' => 'To discuss news and world events' ], [ 'name' => 'Food and Cooking', 'slug' => 'cooking', 'description' => 'To discuss cooking and food' ], [ 'name' => "Animals and Nature", 'slug' => 'animals-nature', 'description' => 'To discuss politics' ] ]; foreach ($categories as $category) { Category::create($category); } } }
And in DatabaseSeeder
<?php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(CategorySeeder::class); } }
Now run php artisan db:seed
and it will be done.