Laravel - Return checkbox clicked

Asked

Viewed 637 times

0

I need to return the checkboxes clicked on a view for editing, but I’m having problems. The values even return clicked but the foreach is duplicating the checkboxes causing an option to appear more than once on screen, so I ask:

There is a better way to do this procedure?

I use the Avavel 5.5 framework

see my code.

Screen print. (In the image it is not possible to see the checks marked or duplicated, but I am posting it to facilitate understanding if necessary inserir a descrição da imagem aqui

View code (Foreach part to display checks)

{{-- percorrendo os valores para verificar qual está preenchido --}}    
@foreach($perfisvinculados as $perfil)                                                                                             
    {{-- percorrendo a tabela permissoes para exibir os checks--}}
    @foreach($permissoes as $keys => $dados_permissoes)                                           
        {{-- se o resto da divisão não for par será exibido na coluna A --}}                           
        @if(!($keys % 2))
            <tr class="">    
                <td></td>             
                <td></td>   
                <td></td>      
                <td></td> 
                <td></td>                                                           
                <td class="">   
                    {{-- verificando se o valor do campo permissoes retornado no primeiro foreach é igual ao da tabela permissoes se for marca o check --}}                                                    
                    @if($perfil->permissoes_id == $dados_permissoes->id)                                                                                                                  
                        <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" checked value="{{$dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                        {{-- se não for exibe o check desmarcado--}}  
                        @else
                        <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                        @endif     
        {{-- se não será exibido na coluna B --}}                                                                                             
        @else                                                
                <td></td>        
                <td class=""> 
                    {{-- verificando se o valor do campo permissoes retornado no primeiro foreach é igual ao da tabela permissoes se for marca o check --}}                                                                                                          
                    @if($perfil->permissoes_id == $dados_permissoes->id)                                                                                                                  
                    <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" checked value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td>  
                {{-- se não for exibe o check desmarcado--}}                                                    
                    @else
                    <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                    @endif      

            </tr> 
        @endif 
    {{-- finalizando o segundo foreach --}}                     
    @endforeach  
{{-- finalizando o primeiro foreach --}}
@endforeach   

Controller

public function edit($perfis_id)
{
    //descriptografando o ID
    $perfis_id = decrypt($perfis_id); 

    // consulta para obter as informações de vínculo do perfil retornando o primeiro registro
    // aqui retorna um unico objeto
    $perfispermissoes = $this->perfispermissoes->where('perfis_id', '=', $perfis_id)
                                               ->first();      

    // consulta utilizada no primeiro laço foreach para marcar os campos
    // aqui retorna um array                                           
    $perfisvinculados = $this->perfispermissoes->where('perfis_id', '=', $perfis_id)
                                                ->get();                                            

    // Recuperando os dados do Perfil para Exibir no Combobox de filtro por Perfil  
    $perfis = $this->perfis->all();   

    // recuperando todas as permissões
    $permissoes = $this->permissoes->all();

    // variavel com o titulo do form    
    $title = 'Altere as Permissões / Perfis Vínculados'; 
    // variavel com a descrição do form de edição
    $desc = 'Altere as permissões vinculadas ao perfil';

    return view('paineladmin.perfis_permissoes.insert-edit', compact('title', 'desc', 'perfispermissoes', 'perfisvinculados', 'perfis', 'permissoes'));
}

1 answer

0


For those with the same problem, I solved as follows:

1- I changed the way to execute the foreach loop. In the previous Code (Beginning of the Post) I performed 2 loops now I perform only one.

2- In my controller I changed the query and performed "rightjoin" to join the tables.

Below the updated code.

Controller:

    public function edit($perfis_id)
        {
            //descriptografando o ID
            $perfis_id = decrypt($perfis_id); 

            // consulta para obter as informações de vínculo do perfil retornando o primeiro registro
            // aqui retorna um unico objeto
            $perfispermissoes = $this->perfispermissoes->where('perfis_id', '=', $perfis_id)
                                                       ->first();      

            // consulta para obter as informações de vinculo do perfil e permissão
            $permissoes = $this->perfispermissoes->rightjoin('permissoes', 'permissoes_id', '=', 'permissoes.id')
            ->select('perfis_permissoes.*', 'permissoes.*')->get();                                              


            // Recuperando os dados do Perfil para Exibir no Combobox de filtro por Perfil  
            $perfis = $this->perfis->all();   

            // variavel com o titulo do form    
            $title = 'Altere as Permissões / Perfis Vínculados'; 
            // variavel com a descrição do form de edição
            $desc = 'Altere as permissões vinculadas ao perfil';

            return view('paineladmin.perfis_permissoes.insert-edit', compact('title', 'desc', 'perfispermissoes', 'perfis', 'permissoes'));
        }

View:

{{-- percorrendo a tabela para exibir os checks--}}
@foreach($permissoes as $keys => $dados_permissoes)                                                
        {{-- se o resto da divisão for par será exibido na coluna A --}}                           
        @if(!($keys % 2))
            <tr class="">    
                <td></td>             
                <td></td>   
                <td></td>      
                <td></td> 
                <td></td>                                                           
                <td class="">   
                    {{-- verificando se o valor do campo permissoes_id  é igual ao campo Id (Tabela está com RightJoin) se form entra no IF --}}                                                    
                    @if($dados_permissoes->permissoes_id == $dados_permissoes->id)                                                                                                                  
                        <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" checked value="{{$dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                        {{-- se não for exibe o check desmarcado--}}  
                    @else

                        <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                    @endif  

        {{-- se não será exibido na coluna B --}}                                                                                             
        @else                                                
                <td></td>        
                <td class=""> 
                    {{-- verificando se o valor do campo permissoes_id  é igual ao campo Id (Tabela está com RightJoin) se form entra no IF --}}                                  
                    @if($dados_permissoes->permissoes_id == $dados_permissoes->id) 

                    <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" checked value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td>  
                {{-- se não for exibe o check desmarcado--}}                                                    
                    @else

                    <p><input type="checkbox" class='chk' name="permissoes_id[]" id="permissoes_id" value="{{ $dados_permissoes->id }}"> {{$dados_permissoes->nome}}</p>             
                </td> 
                    @endif      

            </tr> 
        @endif                                                            
{{-- finalizando o primeiro foreach --}}
@endforeach
  • It is still possible to delete if Else to display checked inputs.Only handle directly in the input <input type="checkbox" class='chk' name="permissions_id[]" id="permissions_id" value="{{ $permissions_permissions->id }}" {{$permissions_permissions->permissions_id == $dates_permissions->id ? 'checked' : ''}}> {$data_permissions->name}}

  • Check out the Laravel Collective also https://laravelcollective.com/docs/master/html

Browser other questions tagged

You are not signed in. Login or sign up in order to post.