Data insertion error : String data, right truncated: 1406

Asked

Viewed 223 times

-1

I am trying to save Checklist data from protocol, but the following error is occurring at the time of saving:

inserir a descrição da imagem aqui

The expectation is that this happens: inserir a descrição da imagem aqui

In the description of the error it says that the type inserted does not hold the storage in the database, that is, the insertion is a line with all the data.

Follows the database structure:

inserir a descrição da imagem aqui

Follow the details of the database fields:

inserir a descrição da imagem aqui

Follows the printing of variables:

inserir a descrição da imagem aqui

Model Code Projectocontroller.php as the registration methodChecklistProtocolo

public function cadastroChecklistProtocolo(Request $request)
    {
        //dd($request->request);
        $dados = $request->only(['item', 'item_descricao_id', 'sim_nao', 'nao_atende', 'dt_validade', 'pagina_documento', 'observacao']);

        //$checklistsProtocolos = new ChecklistProtocolo;
        $checklistsProtocolos  = ChecklistProtocolo::create($dados);
        $checklistsProtocolos->save($dados);



   //echo '<pre>';
     //dd($dados);  //imprimir as variaveis na tela.          

     $response = true;

        if($response)
        {
            return redirect()
                      ->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"); 
        } 
    }  

Code Model Checklistprotocol.php:

<?php

namespace App Models;

use Illuminate Database Eloquent Model; use DB; use Softdeletes;

Checklistprotocol extends Model { protected $table = "checklist_protocol";

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

public $incrementing = false;

public $timestamps = false;

protected  $fillable  = ['projeto_id', 'modelo_id','item','item_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'
        ]; 
    }
}

The display code edits.blade.php from Checklist:

 @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 

2 answers

0

The error is because you are trying to register an array of dates in a column your type is date.

I don’t know if everything was clear to me in your code, but from what I understand you want to save separately these various records in different rows of the table, in case that is you need to make a loop in each option coming from the request, thus creating your Checklistprotocol in sequence and then saving. If you really want to save the date array then you need to replace the column type in sql.

  • 1

    In this case I need to save the records separately and in their respective lines. I will test your loop suggestion on each option coming from the request.

  • If I don’t make it, send it like I’m gonna help you.

  • I updated the description of the question put an image of the expected result.

  • I did so: foreach ($given as $key => $value) { Checklistprotocol :: wherein('item', $value)->create($data); } The insertion error persists.

0


The solution applied was to create a variable ($cont) to count line of each array within the loop of repetition in the registerChecklistProtocolo method.

Reference: Save items from a Checklist form in the database - Laravel

Follows code:

$cont = 0; //contador de linhas para os arrays

              for($i = 0; $i < count($dt_validade); $i++){

                   $dataInsert = array(
                         'sim_nao' => $sim_nao[$cont],                   
                         'dt_validade'=> $dt_validade[$cont], 
                         'pagina_documento' =>$pagina_documento[$cont], 
                         'observacao' =>$observacao[$cont]);           

                         $checklistsProtocolos = checklistProtocolo::where('projeto_id', $projeto_id)
                         ->whereIn('item_descricao_id', (array)$item_descricao_id[$cont])  //atualiza linha por linha do array
                         ->update($dataInsert);
                         $cont++; //atualiza linha por linha do array
                  } 

Browser other questions tagged

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