Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilização do Eloquent.

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?

4 respostas

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.

solução!

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!