I know you can define table relationships fairly easy with $this->belongs_to()
, $this->has_many()
etc, but what i don't understand is how the relationship table is created; the table that binds the two tables together (i forgot what the term is called).
Let's say i'm creating a users table. I want that user to belong to a certain "Role". There are multiple roles, and every role can have multiple users. I will need to also create a roles
table for that. So far, so good.
But after reading the documentation, it says i should add the $this->belongs_to()
in the model, not the migration itself. When, and how is the relationship table created? If i create the roles
and users
tables, and add $this->belongs_to('roles')
to the users
model, and $this->has_many('users')
to the roles
model, will the middle table be created automatically?
When creating a migration you can specify foreign keys on your tables, i.e.
public function up()
{
Schema::table('roles', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
//rest of fields then...
$table->foreign('user_id')->references('id')->on('users');
});
}
This will create a foreign key on the user_id column on the roles table. The benefits of foreign keys is that when an update or delete is made the foreign key table will be automatically updated or "cascaded" great description found here
As described on the Laravel documentation you could also specify your cascading on update using the following syntax
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
I would do a bad job of trying to explain it better than the documentation does so please have a read through the "Relationships" section of the Eloquent ORM documentation to see how its done.