sheet - relationship tables laravel




Laravel-Eloquente “Tem”, “Com”, “Onde tem”-O que eles significam? (2)

Com

with() é para carregamento rápido . Isso basicamente significa que, ao longo do modelo principal, o Laravel pré-carregará o (s) relacionamento (s) que você especificar. Isso é especialmente útil se você tiver uma coleção de modelos e desejar carregar uma relação para todos eles. Porque, com o carregamento rápido, você executa apenas uma consulta adicional ao banco de dados em vez de uma para cada modelo na coleção.

Exemplo:

User > hasMany > Post

$users = User::with('posts')->get();
foreach($users as $user){
    $users->posts; // posts is already loaded and no additional DB query is run
}

Tem

has() é filtrar o modelo de seleção com base em um relacionamento. Por isso, atua de maneira muito semelhante a uma condição WHERE normal. Se você usar has('relation') isso significa que você deseja obter apenas os modelos que possuem pelo menos um modelo relacionado nessa relação.

Exemplo:

User > hasMany > Post

$users = User::has('posts')->get();
// only users that have at least one post are contained in the collection

Onde tem

whereHas() funciona basicamente da mesma forma que has() mas permite especificar filtros adicionais para o modelo relacionado verificar.

Exemplo:

User > hasMany > Post

$users = User::whereHas('posts', function($q){
    $q->where('created_at', '>=', '2015-01-01 00:00:00');
})->get();
// only users that have posts from 2015 on forward are returned

Eu achei um pouco confuso o conceito e o significado desses métodos. É possível que alguém me explique qual é a diferença entre has e with , no contexto de um exemplo (se possível)?


Use whereHas , aqui você terá apenas aquele aluno cujo semestre de frequência é 1

 $users = Student::whereHas('attendance', function($q){ $q->where('semester', 1); })->get(); 




relationship