Laravel - Return checkbox clicked

0

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

Is there a better way to do this?

I use the lavavel 5.5 framework

See my code.

Print screen. (In the image it is not possible to see Checks checked or duplicated, but I am posting it to facilitate understanding if necessary

Viewcode(PartofForeachtodisplaychecks)

{{--percorrendoosvaloresparaverificarqualestápreenchido--}}@foreach($perfisvinculadosas$perfil){{--percorrendoatabelapermissoesparaexibiroschecks--}}@foreach($permissoesas$keys=>$dados_permissoes){{--seorestodadivisãonãoforparseráexibidonacolunaA--}}@if(!($keys%2))<trclass="">    
                <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'));
}
    
asked by anonymous 07.11.2017 / 12:42

1 answer

0

For those of you with the same problem, I have decided as follows:

1- I changed the way to execute the foreach loop. In the previous Code (Post Start) I made 2 loops now I only do one.

2- In my controller I changed the way of querying and realized "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
    
07.11.2017 / 17:37