2
respostas

Relação entre tabelas

Estou criando uma cadastro de pessoas. Cada pessoa poderá ter 3 tipos de cargos. Então em minha tabela pessoas, tenho os campos: cargo_1_id, cargo_2_id, cargo_3_id;

Meu model cargo está assim:

class Cargo extends Model
{
    protected $table = 'cargo';

    public function pessoas() {
        return $this->hasMany('App\Pessoas');
    }
}

E meu model pessoas está assim:

class Membros extends Model
{
    protected $table = 'pessoas';
    public function Cargo(){
        return $this->belongsTo('App\Cargo');
    }
}

No view para visualizar as informações, estou colocando desta forma:

{{ $pessoas->cargo_1->descricao or ''}}

Porém ele não faz a relação entre tabelas.

Alguém sabe como posso fazer essa relação???

2 respostas

Oi Douglas, tudo bom?

Lembra que quando estamos traduzindo um modelo orientado a objetos para o modelo entidade relacional precisamos indicar quando queremos uma chave estrangeira no nosso modelo relacional. Algo como:

return $this->hasMany('App\Pessoas', 'foreign_key');

E também precisamos indicar o relacionamento inverso. Se o Cargo tem muitas Pessoas, então uma pessoa sempre pertence a um cargo:

class Pessoas{
    // resto da classe
        return $this->belongsTo('App\Cargo');
}

Você pode dar uma olhada melhor nessa ideia de relacionamentos de um para muitos (one to many) e muitos para um (many to one) na propria documentação do laravel, com alguns exemplos =)

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

Qualquer dificuldade, compartilha com a gente =)

Abraço e bons estudos.

O meu view poderia ficar desta forma?

{{ $pessoas->cargo_1->descricao or ''}}
{{ $pessoas->cargo_2->descricao or ''}}
{{ $pessoas->cargo_3->descricao or ''}}