-2
Hello, follow my question:
I am trying to save the Protocol Checklist data, but the following error is occurring:
SQLSTATE[22001]: String data, right truncated: 1406 Data Too long for column 'item' at Row 1
How to solve this problem?
1. Follows the image of the modal Checklist Protocol: It is the form responsible for receiving the data entered by the user.
2. Follows the error image when trying to enter the data: 3. Registration methodChecklistProtocolo of the Projectocontroller.php class This method is responsible for registering the Checklist protocol data in the database.
public function cadastroChecklistProtocolo(Request $request)
{
// Deletar a tabela de checklist_protocolo
$checklistsProtocolos = ChecklistProtocolo::where('projeto_id', $request->projeto_id)->delete();
$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'],
'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)
{
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");
}
}
4. Modal Checklistprotocol Code:
<!--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. Checklistprotocol.php template code
<?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. Debugging of the variable "$request->all();"
7. Model ER"
Your
modelo_id
is directly within the$request->all()
but you try to access it within the loop– edson alves
The right thing would be
'projeto_id' => $data['projeto_id']
and the loop should be done only in fields where there is array: Item, item_descricao_id, sim_nao etc...– edson alves
Thank you for the @edsonalves reply. I tested the way you said, but the following error occurred: Illegal string offset 'item'.
– Ruama
Is that the
item
is also at level 0 of the array... With "loop in which are arrays" I meant something like:foreach ($data['item'] as $items) {
and go through its values... But you don’t need to make a direct loop on$data
just pick up the values directly– edson alves
Segue o método: public function cadastroChecklistProtocolo(Request $request){
$data = $request->all();$dataInsert = []; $dataInsert['projeto_id'] = $data['projeto_id']; $dataInsert['modelo_id'] = $data['modelo_id'];
– Ruama
foreach ($date as $dataForm) {$dataInsert[] = ['item' => $dataForm['item'], 'item_descricao_id' => $dataForm['item_descricao_id'],'sim_nao' => $dataForm['sim_nao'], 'dt_validade' => $dataForm['dt_validade'], 'pagina_documento' => $dataForm['pagina_documento'], 'observacao' => $dataForm['observacao'], 'nao_atende' => $dataForm['nao_atende'],];
– Ruama
$data = Checklistprotocol::create($dataInsert);$data->save(); }}
– Ruama
Update your question with this data, it is not cool to put such large snippets in the comments
– edson alves
Hello @Edson Alves. The question has been updated. I would like you to show me an example.
– Ruama