Existe uma diferença que justifique a utilização do Episodio::query()
em vez de Episodio::all()
? Ou é algo específico da versão do Eloquent no curso?
Existe uma diferença que justifique a utilização do Episodio::query()
em vez de Episodio::all()
? Ou é algo específico da versão do Eloquent no curso?
Opa, Vitor. Episodio::all
traz todos os dados. Episodio::query
te retorna uma query onde você pode adicionar filtros, personalizar a query, etc. :-)
Hmmm, então os operadores do ::all
aplicam a filtragem via php e da ::query
diretamente na base?
Como mostra o exemplo na imagem (https://imgur.com/DVneCbQ não está exibindo o markdown), o ::all
também possuí filtragem.
O método all
retorna uma coleção. Aquel where
vai basicamente fazer um array_filter
por baixo dos panos. Já o query
retorna um query builder, então ao executar o get
, a query com WHERE vai ser enviada para o banco. :-)
Legal, coloquei um Log em toda interação com o banco de dados.
if(env('DB_LISTEN', false))
DB::listen(function ($query) {
Log::info($query->sql, ['Bindings' => $query->bindings, 'Time' => $query->time]);
});
O resultado foi exatamente como mencionou.
::all()
:
[2021-09-01 11:37:15] local.INFO: select * from tecnicas
where tecnicas
.deleted_at
is null {"Bindings":[],"Time":1.53}
::query()
:
[2021-09-01 11:37:15] local.INFO: select * from tecnicas
where id
= ? and tecnicas
.deleted_at
is null {"Bindings":[1],"Time":1.2}
Interessantísimo o ganho de performace jogando a filtragem para o BD. Muito obrigado!