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