Boa noite, Tenho uma dúvida sobre quando for um relacionamento entre muitos para muitos. Cada modelo de classe vai ter um método que retorna o hasMany()?
Boa noite, Tenho uma dúvida sobre quando for um relacionamento entre muitos para muitos. Cada modelo de classe vai ter um método que retorna o hasMany()?
Leonardo, tudo bem contigo?
Segue orientação presente na documentação do Laravel - Eloquent: https://laravel.com/docs/7.x/eloquent-relationships#many-to-many
Relações muitos-para-muitos são definidas por se escrever um método que retorne o resultado do método belongsToMany. No exemplo da documentação existem 2 modelos, user e roles(papéis ou funções), um usuário pode acumular mais de um role, e um role pode ser definido para mais de um usuário.
O modelo user fica assim:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The roles that belong to the user.
*/
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
Uma vez que a relação foi definida, você pode acessar os roles(papéis ou funções) do user, usando a propriedade dinamica roles:
$user = App\User::find(1);
foreach ($user->roles as $role) {
//
}
Esta relação pode ser feita por qualquer um dos lados, ou nos dois, vai depender do teu uso, se você precisa recuperar os roles dos users, ou os users que tem um determinado role.
Se você quiser ou tiver de montar a relação inversa, vai ficar do seguinte modo:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
/**
* The users that belong to the role.
*/
public function users()
{
return $this->belongsToMany('App\User');
}
}
Através da propriedade dinamica users do modelo role, vai recuperar todos os usuarios que tem este role. Mesmo caso mostrado acima.
Enfim, vale a pena olhar a documentação conforme link lá em cima.
Espero ter ajudado. Caso tenha solucionado tua dúvida, por favor marcar este tópico como resolvido. Se não postar aqui ainda suas dúvidas. Um abraço e bons estudos.