3
Context:
When trying to register the object Structure checklist the following error occurred:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6-5' for key 'un_checklist_estrutura' (SQL: insert into
checklist_structure(
modelo_id,
itens_id) values (6, 5))
Doubt:
How do I fix this problem? How do I validate the system to fix this error?
1. Structure Checklist data registration screen
2. Error when trying to register the Structure Checklist data
3. Model ER
4. Consultation in the Database
5. Model of Checklistitem (method modelsNaoVinculated() )
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use DB;
use SoftDeletes;
class ChecklistItem extends Model
{
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. Model 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 the Checklistetruturacontroller.php class
//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. Debugging when registering the checklist object