I use Laravel framework and I have recently been informed that there is something named database seeding
which produces a fake dataset for our tests. Is my understanding correct?
Well that's pretty much odd. How it works? How it knows which type of data do I need in X column of database? And how it generates it?
Also, Can't I make a seed of my real dataset (something like an export)? You know, I don't know English very well, that's why I cannot understand the concept of seed in database field.
Yes, Laravel comes with the very great & popular package named - Faker
. You can write this example, using Faker and generate 10 users like this (inside DatabaseSeeder.php
):
use DB;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Faker\Factory as Faker;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker::create();
foreach (range(1,10) as $index) {
DB::table('users')->insert([
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt('secret'),
]);
}
}
}
That’s it –
$faker->name
will generate a random person name, and$faker->email
– a random email. After running commandphp artisan db:seed
your database get populated with some random entries.
You can find this package inside your composer.json
file under require-dev
:
"require-dev": {
"fzaninotto/faker": "^1.6", // <------- here
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.0",
"symfony/css-selector": "3.1.*",
"symfony/dom-crawler": "3.1.*",
"laracasts/testdummy": "~2.0"
},
Faker can generate lots of data, from which some are given below:
$faker->randomDigit;
$faker->numberBetween(1,100);
$faker->word;
$faker->paragraph;
$faker->lastName;
$faker->city;
$faker->year;
$faker->domainName;
$faker->creditCardNumber;
Hope this helps!