0
Context:
I’m creating the method of "Update Structure", depending on the selected model the items must be marked in the Checkbox. But for some reason it is not working. How to solve this problem?
Checklistcontroller.php Controller Edit Method:
//Método que redireciona para a página de atualizar o checklistEstrutura
public function edita($id)
{
$checklistEstrutura = DB::table('checklist_estrutura')
->join('checklist_modelo', 'checklist_modelo.id', '=', 'checklist_estrutura.modelo_id')
->join('checklist_itens', 'checklist_itens.id', '=', 'checklist_estrutura.itens_id')
->select('checklist_itens.id')
->where('modelo_id','=', $id)
->groupBy('checklist_estrutura.estrutura_id', 'checklist_itens.descricao_item')
->distinct()
->get();
$checklistEstruturaArray = $checklistEstrutura->toArray();
$checklistEstruturaModelo = ChecklistEstrutura::where('modelo_id', '=', $id)->first();
$modeloId = $checklistEstruturaModelo->modelo_id;
return view('admin.checklistEstrutura.edita', ['checklistEstruturaModelo' =>$modeloId, 'checklistsModelos' => ChecklistModelo::all(),
'checklistsItens' => ChecklistItem::all(), 'checklistsEstruturas' => $checklistEstruturaArray ]);
}
Debug result for "$checklistArray"
Page edita.blade.php
This snippet of the code checks if the $checklistItemArray is in the $checklistsStructures array. If so, it arrow the combobox. But, it didn’t work.
{{ in_array($checklistItem, $checklistsEstrutures) ? 'checked' : ''}}
@section('content')
<div class="page-content">
<div class="panel">
<div class="panel-body container-fluid">
@include('admin.includes.alerts')
<form method="POST" action="{{ route('checklistEstrutura.atualiza') }}">
<font color="black">
{{csrf_field()}}
<div class="row form-group">
<input type="hidden" name="id" value="{{$checklistEstruturaModelo}}">
<div class="col-md-4">
<label for="inputName" class="control-label">Modelo</label>
<select type="text" class="form-control" name="modelo_id" id="modelo_id" >
<option value="">Selecione</option>
@foreach($checklistsModelos as $checklistModelo)
<option value="{{$checklistModelo->id}}" {{$checklistModelo->id == $checklistEstruturaModelo ? 'selected' : ''}}>{{$checklistModelo->modelo}}</option>
@endforeach
</select>
</div>
</div>
<div class="row form-group col-md-12">
<label>Itens</label>
<br/> <br/>
@foreach($checklistsItens as $checklistItem)
<div class="col-md-12">
<div class="checkbox-custom">
<input type="checkbox" name="itens_id[]" value="" {{ in_array($checklistItem , $checklistsEstruturas) ? 'checked' : ''}} />
<label for="inputUnchecked">{{$checklistItem->descricao_item}}</label>
</div>
</div>
@endforeach
</div>
<div class="text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-floppy-o" aria-hidden="true"></i> Salvar</button>
<a href="{{route('admin.checklistEstrutura')}}" class="btn btn-default"><i class="fa fa-ban" aria-hidden="true"></i> Cancelar</a>
</div>
</font>
</form>
</div>
</div>
</div>
@stop
Template Checkliststructure.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use DB;
class ChecklistEstrutura extends Model
{
protected $table = "checklist_estrutura";
protected $primaryKey = 'Estrutura_id';
public $incrementing = false;
public $timestamps = false;
public function checklistEstrutura()
{
// return $this->belongsTo('App\Models\ChecklistEstrutura', 'estrutura_id','modelo_id', 'itens_id');
return $this->belongsTo(ChecklistEstrutura::class, 'Estrutura_id','modelo_id', 'itens_id');
}
//Este método salva os dados do Checklist da Estrutura
public function salvar(ChecklistEstrutura $checklistEstrutura) : Array
{
$checklistEstrutura = $this->save();
if($checklistEstrutura){
return[
'success' => true,
'message' => 'Sucesso ao cadastrar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao cadastrar'
];
}
}
//Este método remove os dados do Checklist da Estrutura
public function deletar(ChecklistEstrutura $checklistEstrutura) : Array
{
$checklistEstrutura = $this->delete();
if($checklistEstrutura){
return[
'success' => true,
'message' => 'Sucesso ao excluir'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao excluir'
];
}
}
//Este método atualiza os dados do Checklist da Estrutura
public function alterar(ChecklistEstrutura $checklistEstrutura) : Array
{
$checklistEstrutura = $this->save();
if($checklistEstrutura){
return[
'success' => true,
'message' => 'Sucesso ao atualizar'
];
}
else{
return[
'success' => false,
'message' => 'Falha ao atualizar'
];
}
}
}
Note: the data that must be with the "checked" is in the table of Checklist_structure relation. Soon I am consulting all items registered in the table of "checklist_items" and comparing the data of items that are registered in the Checklist_structure table.
Amiga Laravel has a method to facilitate this type of treatment, take a look at the documentation of the Sync() method; If you correctly relate the models, you can use the Sync() method without problems. https://laravel.com/docs/5.1/eloquent-relationships
– Kayo Bruno
Thank you, I’ll look at the documentation.
– Ruama