dimanche 27 novembre 2016

Defining Laravel foreign keys with Model Factories, One to One & One to Many Relationships without creating unnecesary models

Recently I have been trying to seed my database using Laravel seeding through Model Factories and Faker.

For simple schemas, it is just a breeze to have it working :). However, I have encountered several problems when working with complex DB schemas which involve foreign keys and table relationships:

  • One to One
  • One to Many
  • Many to Many

...Like the one described in the link: Laravel 5.1 foreign keys in model factory.

In this topic, the official documentation suggests to run the database seeds like this:

public function run()
{
    factory(App\User::class, 50)->create()->each(function ($u) {
        $u->posts()->save(factory(App\Post::class)->make());
    });
}

... but there is one problem with this solution: when working with many DB tables and running many seeds (with many relations between them), it is common to create many unnecesary models using this methodology. For instance, if we had run the PostsTableSeeder.php before the one of the above example, all those posts would not have been linked to users, and would never be used in tests and development...

So searching for a way to handle this situation, I have come up to a functional solution that works for me and avoids the unnecesary creation of those 'orphan' models...

And I wanted to share it with everyone, so it is just explained in the answer :).



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire