Pergunta

Se eu tiver um modelo Eloquent definido em meu aplicativo que possui vários relacionamentos diferentes configurados com outros tipos de modelo, como posso obter informações de todos esses relacionamentos sem saber mais nada sobre o modelo com o qual estou lidando?

Por exemplo, imagine um modelo de Transação simples que pode ter muitas Linhas e também pertencer a um único Usuário.

Agora, dada uma instância do modelo Transaction (preenchida ou não preenchida), como posso descobrir os relacionamentos que ela tem com os outros modelos?

Só para deixar claro, não quero recuperar os dados reais relacionados, só quero descobrir a que classe cada relacionamento se refere e se é um para muitos, muitos para muitos etc.

Qualquer conselho apreciado.

Obrigado

Foi útil?

Solução

Os modelos eloquentes do Laravel não funcionam dessa maneira, os relacionamentos são definidos por métodos dentro do modelo e não são carregados automaticamente pelo modelo na instanciação, daí a necessidade de realmente chamar esses métodos quando você quiser usar um relacionamento específico.

Quando você instancia uma classe de modelos, ela não tem nenhum relacionamento definido.Isso pode ser mostrado pelo seguinte:

$user = new User();

print_r($user->getRelations());

//Output : empty array

Como você pode ver, o modelo não tem conhecimento de quaisquer relacionamentos que possa ou não ter declarado nos métodos de relacionamento.Quando você chama um relacionamento de modelos:

$user = new User();

$user->find(1)->roles()->get();

Eloquent define o relacionamento no modelo usando um método setRelation($relation, $value) que leva o nome do método chamado como primeiro argumento e o retorno desse método como segundo.Fornecendo assim o contexto para o relacionamento que não existe antes de você solicitá-lo especificamente.

Eu sei que não é isso que você espera ouvir, mas não há como fazer isso com o Eloquent.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top