How to recover data from checkbox as "checked"?

Asked

Viewed 391 times

0

Context:

I’m creating the method of "Update Structure", depending on the selected model the items must be marked in the Checkbox. But for some reason it is not working. How to solve this problem? inserir a descrição da imagem aqui

Checklistcontroller.php Controller Edit Method:

  //Método que redireciona para a página de atualizar o checklistEstrutura
    public function edita($id)
    {

        $checklistEstrutura = DB::table('checklist_estrutura')
        ->join('checklist_modelo', 'checklist_modelo.id', '=', 'checklist_estrutura.modelo_id')
        ->join('checklist_itens', 'checklist_itens.id', '=', 'checklist_estrutura.itens_id')
        ->select('checklist_itens.id')
        ->where('modelo_id','=', $id)
        ->groupBy('checklist_estrutura.estrutura_id', 'checklist_itens.descricao_item')
        ->distinct()
        ->get(); 

        $checklistEstruturaArray = $checklistEstrutura->toArray(); 


        $checklistEstruturaModelo =  ChecklistEstrutura::where('modelo_id', '=', $id)->first();
        $modeloId = $checklistEstruturaModelo->modelo_id;

        return view('admin.checklistEstrutura.edita', ['checklistEstruturaModelo' =>$modeloId, 'checklistsModelos' => ChecklistModelo::all(),
        'checklistsItens' =>  ChecklistItem::all(), 'checklistsEstruturas' =>  $checklistEstruturaArray ]);
    }



Debug result for "$checklistArray"
inserir a descrição da imagem aqui



Page edita.blade.php

This snippet of the code checks if the $checklistItemArray is in the $checklistsStructures array. If so, it arrow the combobox. But, it didn’t work.

{{ in_array($checklistItem, $checklistsEstrutures) ? 'checked' : ''}}



@section('content')
<div class="page-content">
        <div class="panel">
            <div class="panel-body container-fluid">
        @include('admin.includes.alerts')
        <form method="POST" action="{{ route('checklistEstrutura.atualiza') }}">
        <font color="black">
        {{csrf_field()}}

        <div class="row form-group">

                <input type="hidden" name="id" value="{{$checklistEstruturaModelo}}">

                <div class="col-md-4">
                     <label for="inputName" class="control-label">Modelo</label>
                     <select type="text" class="form-control" name="modelo_id" id="modelo_id" >
                     <option value="">Selecione</option>
                                @foreach($checklistsModelos as $checklistModelo)
                                <option value="{{$checklistModelo->id}}" {{$checklistModelo->id == $checklistEstruturaModelo ? 'selected' : ''}}>{{$checklistModelo->modelo}}</option>
                                @endforeach              
                     </select>
                </div> 
        </div>     
         <div class="row form-group col-md-12">
          <label>Itens</label>
          <br/>  <br/>


              @foreach($checklistsItens as $checklistItem)


                            <div class="col-md-12">
                                <div class="checkbox-custom">
                                    <input type="checkbox" name="itens_id[]" value="" {{ in_array($checklistItem , $checklistsEstruturas)  ? 'checked' : ''}}  />
                                    <label for="inputUnchecked">{{$checklistItem->descricao_item}}</label>
                                </div>
                            </div>


              @endforeach

         </div>


            <div class="text-right">
                <button type="submit" class="btn btn-primary"><i class="fa fa-floppy-o" aria-hidden="true"></i> Salvar</button>
                <a href="{{route('admin.checklistEstrutura')}}" class="btn btn-default"><i class="fa fa-ban" aria-hidden="true"></i> Cancelar</a>
            </div>
            </font>
        </form>
    </div>
</div>
</div>
@stop



Model E.R of the database: inserir a descrição da imagem aqui



Template Checkliststructure.php

<?php


namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use DB;


class ChecklistEstrutura extends Model
{
    protected $table = "checklist_estrutura";

    protected $primaryKey = 'Estrutura_id';

    public $incrementing = false;

    public $timestamps = false; 

    public function checklistEstrutura()
    {
    // return $this->belongsTo('App\Models\ChecklistEstrutura', 'estrutura_id','modelo_id', 'itens_id');
    return $this->belongsTo(ChecklistEstrutura::class, 'Estrutura_id','modelo_id', 'itens_id');
    }

    //Este método salva os dados do Checklist da Estrutura
      public function salvar(ChecklistEstrutura $checklistEstrutura) : Array
      {
         $checklistEstrutura = $this->save();

           if($checklistEstrutura){

              return[
                  'success' => true,
                  'message' => 'Sucesso ao cadastrar'
              ];   
          }
          else{

              return[
                  'success' => false,
                  'message' => 'Falha ao cadastrar'
              ]; 
          }
      }


      //Este método remove os dados do Checklist da Estrutura
    public function deletar(ChecklistEstrutura $checklistEstrutura) : Array
    {
        $checklistEstrutura =  $this->delete();
        if($checklistEstrutura){

            return[
                'success' => true,
                'message' => 'Sucesso ao excluir'
            ];   
        }
        else{

            return[
                'success' => false,
                'message' => 'Falha ao excluir'
            ]; 
        }
    }


  //Este método atualiza os dados do  Checklist da Estrutura
  public function alterar(ChecklistEstrutura $checklistEstrutura) : Array
  {
    $checklistEstrutura = $this->save();
      if($checklistEstrutura){
          return[
              'success' => true,
              'message' => 'Sucesso ao atualizar'
          ];   
      }
      else{
          return[
              'success' => false,
              'message' => 'Falha ao atualizar'
          ]; 
      }
  }
}

Note: the data that must be with the "checked" is in the table of Checklist_structure relation. Soon I am consulting all items registered in the table of "checklist_items" and comparing the data of items that are registered in the Checklist_structure table.

  • 1

    Amiga Laravel has a method to facilitate this type of treatment, take a look at the documentation of the Sync() method; If you correctly relate the models, you can use the Sync() method without problems. https://laravel.com/docs/5.1/eloquent-relationships

  • Thank you, I’ll look at the documentation.

1 answer

1

I will try to explain in a simple way, how you should do to be able to use the Sync method().

The Model below will be responsible for your table 'checklist_items'.

class Item extends Model {

    protected $_table = 'checklist_itens';

    public function checklist() {
        return $this->belongsToMany( Modelo::class, 'checklist_estrutura' ); // 1 Parâmetro é o model que será relacionado, 2 parâmetro é a tabela intermediária 
    }

}

The Model below will be responsible for your table 'checklist_template'.

class Modelo extends Model {

    protected $_table = 'checklist_modelo';

    public function checklist() {
        return $this->belongsToMany( Item::class, 'checklist_estrutura' ); 
    }

}

In your upgrade method you will use the following.

public function editar( Request $request, $id ) {
    $fields = $request->all();
    $modelo = Modelo::find( $id ); //

    // "checklist" que a gente está chamando aqui é o método que definimos no Model: Modelo
    $modelo->checklist()->sync( $fields['itens_id'] ); // Esse método recebe um array com os ID`s.
}

The Sync() method already does all the treatment to check whether or not the relationship exists, if it exists it removes if it does not create.

  • Hello Kayo Bruno, while trying to implement your suggestion the following error occurred: Undefined index: itens_id

  • 1

    itens_id is to be the array with the ids marked in the checkbox

  • I get it, but the Laravel is not recognizing.

  • 1

    Your edit method, besides receiving the $id it needs to receive a request. That’s how?

  • Yes, it is as follows: public Function edita($id, Request $request). And the route is set like this: $this->get('edits/{id}','Checkliststructurecontroller@edits')->name('checklistEstruture.edits');

  • The route method cannot be GET because it is an update, the correct one must be PUT.

  • Hello, I fixed the route and changed the GET method by PUT. But the following error occurred: Methodnotallowedhttpexception

Show 3 more comments

Browser other questions tagged

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