Curso de Laravel para Noobs - #13 Models IV [Consultas Opcionais]
06/04/2023Nesse tutorial aprenderemos como utilizar consultas opcionais dentro do Laravel utilizando o Eloquent.
Consultas opcionais no Laravel
routes/web.php
Primeiramente vamos criar duas rotas, uma para o formulário e outra para o post de pesquisa:
Route::get('/pesquisa', [Controller::class,'pesquisa']);
Route::post('/pesquisa', [NomeController::class,'pesquisa']);
resource/views/pesquisa.blade.php
Trata-se de um html simples com o formulário de pesquisa utilizado de exemplo na aula:
<form method="post" action="" name="formFiltros" id="formFiltros">
@csrf
<div class="filtros">
<div><input type="text" name="name" id="name" placeholder="Pesquisar por nome:"></div>
<div>
<input type="date" name="startDate" id="searchStartDate"> à
<input type="date" name="endDate" id="searchEndDate">
</div>
<div><input type="submit" value="Buscar"></div>
</div>
</form>
Na sequência criaremos o model, o controller e a migration via Laravel Cli no terminal de comandos:
php artisan make:model Nome -mcr
database/migrations/create_nomes_table.php
Nossa migration ficará da seguinte forma:
public function up()
{
Schema::create('nomes', function (Blueprint $table) {
$table->id();
$table->string('nome');
$table->dateTime('data');
$table->timestamps();
});
}
Posteriormente podemos enviar a tabela para o banco:
php artisan migrate
No PhpMyAdmin vamos inserir dois registros de teste:
INSERT INTO `nomes` (`id`, `nome`, `data`, `created_at`, `updated_at`) VALUES ('1', 'Thiago', '2023-04-01 11:31:50', NULL, NULL), ('2', 'Thais', '2023-04-27 11:31:50', NULL, NULL);
app/Http/NomeController.php
No nome controller executaremos a busca:
/**
* Executar a pesquisa opcional
*/
public function pesquisa(Request $request)
{
$starDate = new \DateTime($request->startDate);
$endDate = new \DateTime($request->endDate);
$nomes = Nome::where('nome','like','%'.$request->name.'%')
->when($request->startDate, function($query) use($starDate,$endDate){
$query->whereDate('data','>=',$starDate->format('Y-m-d').' 00:00:00');
$query->whereDate('data','<=',$endDate->format('Y-m-d').' 23:59:59');
})
->get();
dd($nomes);
}
Não esqueça de inicializar o servidor:
php artisan serve
Por hoje é só! Fiquem todos com Deus! Sucesso nos códigos e na vida!
Precisa de um professor? webdesignemfoco@gmail.com