Problema
tem, com e Onde tem às vezes pode ser confuso para desenvolvedores iniciantes. Vamos dar alguma perspectiva sobre o que cada um deles significa
Solução
com() é geralmente usado com carregamento ansioso, o que é uma maneira rápida de puxar modelos relacionados. Basicamente, significa que, junto com o modelo principal, o Laravel pré -carregará o (s) relacionamento (s) listado (s). Isso é benéfico quando você precisa carregar dados adicionais e deseja evitar fazer N+1 DB más práticas. Com carregamento ansioso, você executa apenas uma consulta adicional de banco de dados em vez de potencialmente centenas de consultas adicionais.
Exemplo:
Usuário> Hasmany> OrganizaçãoTem
tem() é usado para filtrar o modelo de seleção com base no relacionamento selecionado. É basicamente um método onde as relações. Se você apenas usa tem ('organização'), Usando o mesmo exemplo de usuários e organizações, isso significaria que ele puxará todos os usuários que têm pelo menos uma organização em seu 'portfólio'.
Exemplo:
Usuário> Hasmany> OrganizaçãoOnde tem
Onde tem() é quase o mesmo que tem(). Apenas permite que você especifique filtros adicionais para que o modelo relacionado seja verificado.
Exemplo:
Usuário> Hasmany> Organização