-
01.Um para um: hasOne
Um usuário tem um perfil.
<?php class User extends Model { /* +-------------------+ | users | +-------------------+ | id | +-------------------+ +-------------------+ | profiles | +-------------------+ | id | | user_id | +-------------------+ */ public function profile() { return $this->hasOne( Profile::class, /* Model relacionado */ 'user_id', /* FK desse model na tabela relacionada */ 'id' /* PK do outro model */ ); /* OU */ return $this->hasOne(Profile::class); } } ?> -
02.Um para muitos: hasMany
Um usuário tem muitos posts.
<?php class User extends Model { /* +-------------------+ | users | +-------------------+ | id | +-------------------+ +-------------------+ | posts | +-------------------+ | id | | user_id | +-------------------+ */ public function posts() { return $this->hasMany( Post::class, /* Model relacionado */ 'user_id', /* FK desse model na tabela relacionada */ 'id' /* PK do outro model */ ); /* OU */ return $this->hasMany(Post::class); } } ?> -
03.Um para muitos: belongsTo
Um perfil pertence a um usuário.
<?php class Profile extends Model { /* +-------------------+ | users | +-------------------+ | id | +-------------------+ +-------------------+ | profiles | +-------------------+ | id | | user_id | +-------------------+ */ public function user() { return $this->belongsTo( User::class, /* Model relacionado */ 'user_id', /* FK desse model na tabela relacionada */ 'id' /* PK do outro model */ ); /* OU */ return $this->belongsTo(User::class); } } ?> -
04.Muitos para muitos: belongsToMany
Um usuário tem muitas regras através de role_user.
<?php class User extends Model { /* +-------------------+ | users | +-------------------+ | id | +-------------------+ +-------------------+ | role_user | +-------------------+ | role_id | | user_id | +-------------------+ +-------------------+ | roles | +-------------------+ | id | +-------------------+ */ public function roles() { return $this->belongsToMany( Role::class, /* Model relacionado */ 'role_user', /* Tabela pivot */ 'user_id', /* FK desse model na tabela pivot */ 'role_id', /* FK do outro model na tabela pivot */ 'id', /* PK desse model */ 'id' /* PK do outro model */ ); /* OU */ return $this->belongsToMany(Role::class); } } ?> -
05.Um através de outro: hasOneThrough
Uma companhia tem uma licença através de empregados.
<?php class Company extends Model { /* +-------------------+ | companies | +-------------------+ | id | +-------------------+ +-------------------+ | employees | +-------------------+ | id | | company_id | +-------------------+ +-------------------+ | licenses | +-------------------+ | id | | employee_id | +-------------------+ */ public function license() { return $this->hasOneThrough( License::class, /* Model final */ Employee::class, /* Model intermediário */ 'company_id', /* FK da tabela intermediária */ 'employee_id', /* FK da tabela final */ 'id', /* PK da tabela inicial */ 'id' /* PK da tabela intermediária */ ); /* OU */ return $this->hasOneThrough(License::class, Employee::class); } } ?> -
06.Muitos através de outro: hasManyThrough
uma companhia tem muitos projetos através de empregados.
<?php class Company extends Model { /* +-------------------+ | companies | +-------------------+ | id | +-------------------+ +-------------------+ | employees | +-------------------+ | id | | company_id | +-------------------+ +-------------------+ | projects | +-------------------+ | id | | employee_id | +-------------------+ */ public function projects() { return $this->hasManyThrough( Project::class, /* Model final */ Employee::class, /* Model intermediário */ 'company_id', /* FK da tabela intermediária */ 'employee_id', /* FK da tabela final */ 'id', /* PK da tabela inicial */ 'id' /* PK da tabela intermediária */ ); /* OU */ return $this->hasManyThrough(Project::class, Employee::class); } } ?>