Context:
When attempting to register the Structure Checklist object, the following error occurred:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6-5' for key 'un_checklist_estrutura' (SQL: insert into
checklist_astructure (
model_id ,
items_id ) values (6, 5))
Doubt:
How to solve this problem? How do I validate for the system to handle this error?
1. Structure Checklist data record screen
2.ErrortryingtoregistertheStructureChecklistdata
3.ModelER
4.QueryintheDatabase
5.ModelChecklistItem(methodNodeVinculated()methods)
<?phpnamespaceApp\Models;useIlluminate\Database\Eloquent\Model;useDB;useSoftDeletes;classChecklistItemextendsModel{protected$table="checklist_itens";
protected $primaryKey = 'id';
public $incrementing = false;
public $timestamps = false;
public function checklistItem()
{
return $this->belongsTo('App\Models\ChecklistItem', 'id');
}
//Relacionamentos entre a tabela checklist_modelo e checklist_itens (relacionamento m:m "muitos para muitos")
/* public function checklistEstrutura()
{
return $this->belongsToMany(ChecklistEstrutura::class, 'checklist_modelo', 'modelo_id', 'itens_id');
}
*/
public function checkListModelos()
{
return $this->belongsToMany(ChecklistModelo::class, 'checklist_estrutura');
}
public function modelosNaoVinculados()
{
$checkListsModelo = CheckListModelo::whereNotIn('id', function($query){
$query->select('checklist_estrutura.modelo_id');
$query->from('checklist_estrutura');
$query->whereRaw("checklist_estrutura.itens_id = {$this->id} ");
})->sql();
return $checkListsModelo;
}
//Este método salva os dados do Checklist do Item
public function salvar(ChecklistItem $checklistItem) : Array
{
$checklistItem = $this->save();
if($checklistItem){
return[
'success' => true,
'message' => 'Sucesso ao cadastrar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao cadastrar'
];
}
}
//Este método remove os dados do Checklist do Item
public function deletar(ChecklistItem $checklistItem) : Array
{
$checklistItem = $this->delete();
if($checklistItem){
return[
'success' => true,
'message' => 'Sucesso ao excluir'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao excluir'
];
}
}
//Este método atualiza os dados do Checklist do Item
public function alterar(ChecklistItem $checklistItem) : Array
{
$checklistItem = $this->save();
if($checklistItem){
return[
'success' => true,
'message' => 'Sucesso ao atualizar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao atualizar'
];
}
}
}
6. Template ChecklistModel
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use DB;
use SoftDeletes;
class ChecklistModelo extends Model
{
protected $table = "checklist_modelo";
protected $primaryKey = 'id';
public $incrementing = false;
public $timestamps = false;
public function checklistModelo()
{
return $this->belongsTo('App\Models\ChecklistModelo', 'id');
}
public function checkListItens()
{
return $this->belongsToMany(ChecklistItem::class, 'checklist_estrutura');
}
//Relacionamentos entre a tabela checklist_modelo e checklist_itens (relacionamento m:m "muitos para muitos")
/* public function checklistEstrutura()
{
return $this->belongsToMany(ChecklistEstrutura::class, 'checklist_modelo', 'modelo_id', 'itens_id');
} */
//Este método salva os dados do Checklist do Modelo
public function salvar(ChecklistModelo $checklistModelo) : Array
{
$checklistModelo = $this->save();
if($checklistModelo){
return[
'success' => true,
'message' => 'Sucesso ao cadastrar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao cadastrar'
];
}
}
//Este método remove os dados do Checklist do Modelo
public function deletar(ChecklistModelo $checklistModelo) : Array
{
$checklistModelo = $this->delete();
if($checklistModelo){
return[
'success' => true,
'message' => 'Sucesso ao excluir'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao excluir'
];
}
}
//Este método atualiza os dados do Checklist do Modelo
public function alterar(ChecklistModelo $checklistModelo) : Array
{
$checklistModelo = $this->save();
if($checklistModelo){
return[
'success' => true,
'message' => 'Sucesso ao atualizar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao atualizar'
];
}
}
}
8. Registration method of class ChecklistErrorController.php
//Método para cadastrar um checklist de estrutura
//ERRO: é necessário fazer a validação de integridade, por exemplo se um item e modelo forem salvos 2 vezes ocorre um erro no banco de dados
public function cadastro(Request $request)
{
//Recebe os dados do formulário a saber: modelo_id e itens_id (array de dados)
$modelo_id = $request->get('modelo_id');
$itens_id = [];
$arrayItensId = [];
$itens_id = $request->get('itens_id');
$checklistItem = ChecklistItem::where('id', $itens_id);
// dd($checklistItem);
// $checklistItem = ChecklistItem::where('id', 1)->first();
//$checklistItem->attach([5,6,7,8,9,10,11,12,13]);
$checklistItem->attach([$modelo_id]);
dd($checklistItem );
#controller
// $checkListItens = CheckListItem::where('id', 1)->first();
//$checkListItens = CheckListItem::where('id', $itens_id);
// dd($checkListItens);
#modelosNaoVinculados
// $checkListsModelo = $checkListItens->modelosNaoVinculados();
// dd($checkListsModelo);
//Esta estrutura de repetição salva os dados do checklist de estrutura
/* for ($i=0; $i < sizeof($itens_id); $i++) {
$checklistEstrutura = new ChecklistEstrutura();
$checklistEstrutura->modelo_id = $modelo_id;
$checklistEstrutura->itens_id = $itens_id[$i];
$response = $checklistEstrutura->salvar($checklistEstrutura);
} */
if($response['success']){
return redirect()
->route('admin.checklistEstrutura')
->with('success',$response['message']);
}
else{
return redirect()
->back()
->with('error',$response['message']);
}
}
9. Debug when registering object checklist Structure
10.Error: