How to troubleshoot the error: String data, right truncated: 1406

-2

Hello, follow my question:

I'm trying to save the data from the Checklist Protocol, but the following error is occurring:

  

SQLSTATE [22001]: String data, right truncated: 1406 Data too long for column 'item' at row 1

How can I solve this problem?

1. Here is the image of the modal Checklist Protocol: It is the form responsible for receiving the data entered by the user.

2.Hereistheerrorimagewhentryingtoregisterthedata: 3.LoginmethodChecklistProtocolController.phpclassThismethodisresponsibleforregisteringthedatafromthechecklistprotocolinthedatabase.

publicfunctioncadastroChecklistProtocolo(Request$request){//Deletaratabeladechecklist_protocolo$checklistsProtocolos=ChecklistProtocolo::where('projeto_id',$request->projeto_id)->delete();$data=$request->all();$dataInsert=[];//Observequeeutireiopush($dataInsert[])poisassimiriaadicionarmaisumaarraynofim$dataInsert=['projeto_id'=>$data['projeto_id'],'item'=>$data['item'],'modelo_id'=>$data['modelo_id'],'item_descricao_id'=>$data['item_descricao_id'],'sim_nao'=>$data['sim_nao'],'nao_atende'=>$data['nao_atende'],'dt_validade'=>$data['dt_validade'],'pagina_documento'=>$data['pagina_documento'],'observacao'=>$data['observacao'],];//dd($dataInsert);$dados=ChecklistProtocolo::create($dataInsert);$response=true;if($response){returnredirect()->route('projeto.edita',$request->projeto_id)->with('success',"Sucesso ao atualizar os Checklists do Protocolo");
        }else
        {
            return redirect()
                      ->back()
                      ->with('error',"Erro ao atualizar o Checklists do Protocolo"); 
        } 
    }     

4. Modal Code ChecklistProtocol:

  <!--Inicio do modal de Checklist do Projeto-->
<form id="checklistProtocolo" action="{{route('projeto.cadastroChecklistProtocolo')}}" method="POST">

                  {{ csrf_field() }}  
  <div class="modal fade modal-default" id="modalChecklist" aria-hidden="true" aria-labelledby="examplePositionCenter"
                 role="dialog" tabindex="-1">

                <div class="modal-dialog2 modal-center">
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">×</span>
                            </button>
                            <h4 class="modal-title">Checklists do Protocolo</h4>
                        </div>

                        <div class="form-group col-md-4">
                             <input type="hidden" id="projeto_id" name="projeto_id" value="{{$projeto->id}}">
                             <input type="hidden" id="modelo_id"  name="modelo_id" value="{{$modeloProtocolo[0]['id']}}">
                             <label class="control-label">Modelo</label>
                             <input type="text" class="form-control" name="modeloProcesso" value="{{$modeloProtocolo[0]['modelo']}}" disabled> 

                        </div>
                        <div class="modal-body">
                        <div class="form-group col-md-18">

                             <table id="checklistProtocolo" name="checklistProtocolo" class="table table-hover table-striped table-responsive toggle-arrow-tiny" >
                                <caption></caption>
                                    <thead>
                                        <tr>
                                            <th>Item</th> 
                                            <th>Descrição</th>
                                            <th>Sim/Não</th>
                                            <th>Não Atende</th>
                                            <th>Data de Validade</th>
                                            <th>Página do Documento</th>
                                            <th><center>Observações</center> </th>
                                            <th class="text-center"></th>
                                        </tr>
                                    </thead>
                                    <tbody id="bodyChecklists">

                            @foreach($checklistsProtocolos as $checklistProtocolo)

                                <tr>
                                    <td><input type="text" class="form-control"  id="item" name="item[]" value="{{$checklistProtocolo->item}}"  size ="2"></td>
                                    <td>{{$checklistProtocolo->descricao_item}}</td>   
                                    <input type="hidden"          id="item_descricao_id"  name="item_descricao_id[]" value="{{$checklistProtocolo->item_descricao_id}}">
                                    <td><input type="checkbox"    id="sim_nao"            name="sim_nao[]"    {{$checklistProtocolo->sim_nao == null ? '' : 'checked'}}></td>
                                    <td><input type="checkbox"    id="nao_atende"         name="nao_atende[]" {{$checklistProtocolo->nao_atende == null ? '' : 'checked'}}></td>
                                    <td><input type="date"        id="dt_validade"        name="dt_validade[]" value="{{$checklistProtocolo->dt_validade}}"></td>
                                    <td><input type="text"        id="pagina_documento"   name="pagina_documento[]" value="{{$checklistProtocolo->pagina_documento}}" size ="1"></td>
                                    <td><input type="text"        id="observacao"         name="observacao[]" value="{{$checklistProtocolo->observacao}}" size ="1" style="width: 300px; height: 60px"></td>
                                </tr>

                            @endforeach 

                               </tbody>
                        </table>



                        </div>

                        </div><!--Fim do modal-body-->

                        <div class="modal-footer">
                        <center>
                        <button type="submit" class="btn btn-primary"  aria-hidden="true" style="width: 300px; height: 40px" > Salvar</button>

                        </center>
                        </div>
                    </div>
                </div>
            </div>
            </form>  
  <!--Fim do modal do Checklist do Projeto-->    

5. Template Code ChecklistProtocol.php

<?php

namespace App\Models;

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

class ChecklistProtocolo extends Model
{
    protected $table = "checklist_protocolo";

    protected $primaryKey =  ['projeto_id', 'modelo_id','itens_descricao_id'];

    public $incrementing = false;

    public $timestamps = false;

    protected  $fillable  = ['projeto_id', 'modelo_id','item','itens_descricao_id','sim_nao', 'nao_atende','dt_validade','pagina_documento','observacao'];

    protected $casts = [ 'item' => 'array', 'item_descricao_id'=> 'array','sim_nao' => 'array', 'dt_validade'=> 'array', 
    'pagina_documento'=> 'array', 'observacao'=> 'array', 'nao_atende'=> 'array'];

    /* 
    public function checklistProtocolo()
    {
         return $this->belongsTo(ChecklistProtocolo::class, 'projeto_id','modelo_id', 'itens_descricao_id');
    } */

    //Este método salva os dados do Checklist do Protocolo
    public function salvar(ChecklistProtocolo $checklistProtocolo) : Array
    {
       $checklistProtocolo = $this->save();

         if($checklistProtocolo){

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

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


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

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

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


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


}

6. Debug of variable "$ request-> all ();"


7. ER model "

8. Description of the database table

    
asked by anonymous 27.11.2018 / 14:20

1 answer

1

According to my comment, it is not necessary to loop the data from $data just access directly:

Note: If Model is not ready to accept arrays this line $dados = ChecklistProtocolo::create($dataInsert); will result in error, since dataInsert is an array of 2 levels.

       $data = $request->all();
        $dataInsert = [];
            //Observe que eu tirei o push ($dataInsert[]) pois assim iria adicionar mais uma array no fim 
            $dataInsert = [
                'projeto_id' => $data['projeto_id'],
                'modelo_id' => $data['modelo_id'],
                'item' => $data ['item'],
                'item_descricao_id' => $data ['item_descricao_id'],
                'sim_nao' => $data ['sim_nao'],
                'dt_validade' => $data ['dt_validade'],
                'pagina_documento' => $data ['pagina_documento'],
                'observacao' => $data ['observacao'],
                'nao_atende' => $data ['nao_atende'],
            ];
           $dados =  ChecklistProtocolo::create($dataInsert);
           $dados->save();

Update

The error

  

SQLSTATE [22001]: String data, right truncated: 1406 Data too long for   column 'item' at row 1   It happens because your column item (and others) does not have enough space to save the data, being only 10 characters.

When using cast , your array will be converted into a string to be saved, which generates a string well greater than 10 characters.

    
27.11.2018 / 20:01