No data in relation ( select-dropdown )
Author: DanielGomeXCreated Nov 4, 2024Updated Nov 4, 2024
Labelspossible bug
### Laravel version
8.83.27
### PHP version
8.0.13
### Voyager version
1.7
### Database
MySQL 5.7
### Description
Descrição do Problema:
Ao configurar um campo do tipo select-dropdown em um relacionamento para exibir o nome de um cliente e salvar apenas o ID correspondente, o Voyager não exibe corretamente as opções e apresenta inconsistências. O dropdown inicia a listagem a partir do último registro e não do primeiro, o que resulta em uma exibição desordenada e causa erros de seleção para o usuário final.
Passos para Reproduzir o Erro:
Configure um relacionamento no Voyager entre uma tabela principal e uma tabela de clientes, onde:
O campo cliente_id armazena o ID do cliente na tabela principal.
O label do relacionamento é configurado para exibir o nome do cliente.
Acesse o campo de relacionamento no formulário de edição de registros.
Verifique que as opções do dropdown começam a contar a partir do último registro, em vez de começar pelo primeiro registro, como seria o esperado.
Comportamento Esperado:
O dropdown deve exibir a lista de clientes em ordem correta, começando pelo primeiro registro, para que o usuário possa visualizar os nomes dos clientes e selecionar corretamente. Após a seleção, o Voyager deve salvar apenas o ID do cliente.
Comportamento Observado:
A lista de clientes começa a partir do último registro na tabela, e as chaves das opções estão incorretamente sincronizadas com o índice de cada item.
Informações Adicionais:
Versão do Voyager: 1.7
Versão do Laravel: 8.83
Versão do MySQL: 5.7 / 8.0
Navegador: Chrome / Firefox
Sistema Operacional: [informe o SO utilizado, se relevante]
Código Relacionado (Select Dropdown no Blade):
blade
@if(isset($options->relationship))
@if( !method_exists( $dataType->model_name, \Illuminate\Support\Str::camel($row->field) ) )
{{ __('voyager::form.field_select_dd_relationship', ['method' => \Illuminate\Support\Str::camel($row->field).'()', 'class' => $dataType->model_name]) }}
@endif @if( method_exists( $dataType->model_name, \Illuminate\Support\Str::camel($row->field) ) ) field, $dataTypeContent->{$row->field}); ?> default) && !isset($dataTypeContent->{$row->field})) ? $options->default : null; ?> @if(isset($options->options)) options); ?> @foreach($optionsList as $chave => $option) @endforeach @endif @else  @endif @else @endif Possível Causa Suspeita: Parece que a função array_values ou a estrutura de foreach no Blade não está reindexando corretamente as chaves do array, o que resulta em uma listagem incorreta no dropdown. Solução ou Sugestão de Correção: Realinhar as chaves do array $optionsList ou ajustar o método de obtenção das opções de relacionamento para que inicie corretamente pelo primeiro registro. Outra possibilidade é verificar o método de ordenação no backend que fornece os dados para o campo de relacionamento. ### Steps to reproduce  ### Expected behavior  ### Screenshots   ### Additional context _No response_Source: thedevdojo/voyager