Question

I have a database seed file:

class ContactTableSeeder extends Seeder {
    public function run()
    {
        $contacts = array(
            array(
                'first_name'        => 'Test',
                'last_name'         => 'Contact',
                'email'             => 'test.contact@emai.com',
                'telephone_number'  => '0111345685',
                'address'           => 'Address',
                'city'              => 'City',
                'postcode'          => 'postcode',
                'position'          => 'Director',
                'account_id'        => 1
           )
        );

        foreach ($contacts as $contact) {
            Contact::create($contact);
        }
    }
}

When I run php artisan migrate:refresh --seed it seeds the database and creates the relevant record in the contacts table, except that it does not fill the fields with any of the information in the seed array. I am using the exact same syntax for other tables and they work fine, and I've also checked each field thoroughly to make sure they match the database fields but no matter what I do it will not seed correctly.

Does anyone have any ideas?

Was it helpful?

Solution 2

Turns out the issue was to do with relationships in my models.

For future visitors to this question: make sure to check all the functions in your models that define hasOne/hasMany/etc relationships. Read though the Eloquent docs for more.

OTHER TIPS

I had this same problem but none of the above solutions worked for me. It turned out to be due to having a construct function in my model! After I removed this it worked fine!

public function __construct()
{
    parent::__construct();
}

EDIT: After further reading on this I discovered the issue is due to the fact that if you are going to include a constructor in your model must accept the attributes parameter and pass it to the parent. If you do this then the constructor does not break the DB seeding (and probably other things). I hope this saves someone else a headache.

public function __construct($attributes = array())
{
    parent::__construct($attributes);
}

Do you have $this->call("ContactTableSeeder") in your DatabaseSeeder class' run() function?

If you have ContactTableSeeder in it's own file, is the file named ContactTableSeeder.php exactly? If not it would fail to load according to the PSR-0 Standard.

These are my first thoughts.

Have you tried to replace the following lines:

foreach ($contacts as $contact) {
   Contact::create($contact);
}

with

DB::table('contact')->insert($contacts);

assuming your table name is contact. And also, make sure you have line like this

$this->call('ContactTableSeeder');

in your DatabaseSeeder class.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top