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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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 ::allaplicam 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!