Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Como usar hasOne chave composta?

Como seria para utilizar o hasOne quando a FK é uma chave composta (duas ou mais colunas)?

Sei que para chave não composta seria assim:

public function Usuario()
{
        return $this->hasOne('App\Telefone', 'usuario_id', 'telefone_id');
}
3 respostas

Oi, Erika!

O Eloquent por padrão não suporta isso.

Acho que vale analisar a necessidade de ter chaves múltiplas. Se realmente precisar (o que não é tão comum quanto parece), você pode utilizar este pacote:

https://github.com/topclaudy/compoships

Vinicius, obrigada!

O problema é que estou trabalhando com um sistema legado e quase todas as tabelas possuem PK e FK compostas. A ideia inicial é não mexer no modelo do banco da dados. Você enxerga alguma outra implicação, como por exemplo, lentidão?

Ah sim, Erika. Entendi.

Então, não sou expert em Banco de Dados a ponto de responder se haveria alguma implicação. Até onde meu conhecimento chega, acredito que a implicação acabe na dificuldade de manutenção apenas.

Mas, concordo com você que o ideal é não alterar a estrutura do banco neste momento. Eu indicaria ainda você dar uma olhada no projeto https://www.laraveldoctrine.org/ pra ver se seria interessante pra você. Doctrine é mais poderoso e configurável, logo pode ser melhor para bancos legados.