Como criar campo select no formulário com Laravel 10


Neste tutorial, será apresentado como criar um campo select no formulário com Laravel 10. 

Primeiramente, será mostrado como preencher o campo select com Laravel. 

Em seguida, será apresentado como salvar dados do campo select no banco de dados. 

Por fim, será mostrado como criar o campo select no formulário de edição.


Download do código fonte desenvolvido na aula: Download

Curso de Laravel: Mais Detalhes do Curso

Playlist completa sobre Laravel: Acessar

Receber as aulas gratuitas do curso de Laravel: Acessar


Para começar, é utilizado como base o projeto da aula "Como criar relacionamentos entre tabelas com hasMany no Laravel 10".

Na controller 'app/Http/Controllers/ContaController.php', no método 'create', responsável por carregar a página com o formulário, são recuperadas as situações no banco de dados e enviadas para a view.

// Carregar o formulário cadastrar nova conta
public function create()
{
    // Recuperar do banco de dados as situações
    $situacoesContas = SituacaoConta::orderBy('nome', 'asc')->get();

    // Carregar a VIEW
    return view('contas.create', [
        'situacoesContas' => $situacoesContas,
    ]);
}

Na view 'resources/views/contas/create.blade.php', foi criado um campo do tipo select preenchido com as situações recuperadas do banco de dados. Também foi utilizado o método 'old' para manter a opção selecionada em caso de cadastro incorreto, decorrente de algum erro no preenchimento de outro campo.

<div class="col-md-4 col-sm-12">
    <label for="situacao_conta_id" class="form-label">Situação da Conta</label>
    <select name="situacao_conta_id" id="situacao_conta_id" class="form-select">
        <option value="">Selecione</option>
        @forelse ($situacoesContas as $situacaoConta)
            <option value="{{ $situacaoConta->id }}"
                {{ old('situacao_conta_id') == $situacaoConta->id ? 'selected' : '' }}>
                {{ $situacaoConta->nome }}</option>
        @empty
            <option value="">Nenhuma situação da conta encontrada</option>
        @endforelse
    </select>
</div>

Para validar o campo select com Laravel, no arquivo 'app/Http/Requests/ContaRequest.php', foi implementada a validação indicando que o campo 'situacao_conta_id' é obrigatório.

'situacao_conta_id' => 'required',

Também foi criada a mensagem personalizada de erro no request com Laravel.

'situacao_conta_id.required' => 'Campo situação da conta é obrigatório!',

Para salvar o valor do campo select no banco de dados, na controller 'app/Http/Controllers/ContaController.php', no método 'store', foi implementado que a coluna 'situacao_conta_id' no banco de dados receba o valor proveniente do campo 'situacao_conta_id' do formulário.

'situacao_conta_id' => $request->situacao_conta_id,

Para adicionar o campo select no formulário de edição no Laravel, na controller 'app/Http/Controllers/ContaController.php', no método 'edit', foram recuperadas as situações do banco de dados e enviadas para a view.

// Carregar o formulário editar a conta
public function edit(Conta $conta)
{
    // Recuperar do banco de dados as situações
    $situacoesContas = SituacaoConta::orderBy('nome', 'asc')->get();

    // Carregar a VIEW
    return view('contas.edit', [
        'conta' => $conta,
        'situacoesContas' => $situacoesContas,
    ]);
}

Na view 'resources/views/contas/edit.blade.php', foi criado um campo do tipo select preenchido com as situações recuperadas do banco de dados. Além disso, foi utilizado o atributo 'selected' para manter a situação selecionada de acordo com o que está cadastrado no banco de dados.

<div class="col-md-4 col-sm-12">
    <label for="situacao_conta_id" class="form-label">Situação da Conta</label>
    <select name="situacao_conta_id" id="situacao_conta_id" class="form-select">
        <option value="">Selecione</option>
        @forelse ($situacoesContas as $situacaoConta)
            <option value="{{ $situacaoConta->id }}"
                {{ old('situacao_conta_id', $conta->situacao_conta_id) == $situacaoConta->id ? 'selected' : '' }}>
                {{ $situacaoConta->nome }}</option>
        @empty
            <option value="">Nenhuma situação da conta encontrada</option>
        @endforelse
    </select>
</div>

Para salvar o valor do campo select no banco de dados, na controller 'app/Http/Controllers/ContaController.php', no método 'update', foi implementado que a coluna 'situacao_conta_id' no banco de dados receba o valor proveniente do campo 'situacao_conta_id' do formulário.

'situacao_conta_id' => $request->situacao_conta_id,

Baixar o código-fonte completo do projeto.

Bom, era isso. Espero que o tutorial tenha sido útil!