I need to make a custom field just like checklist, but in a table and with a second field "order".
This is what I have:
These two models are in relations with the table products_service that has the two foreign_keys plus the column "order"
What I can't understand is:
How could save the extra information with backpack.
I know that I can use something like this:
$user->roles()->updateExistingPivot($roleId, $attributes);
but where should I put it?
Here's my code:
class Condition extends Model
{
use CrudTrait;
use Searchable;
public function relService()
{
//dd($this->belongsToMany(SubService::class, 'conditions_service')->withPivot('weight')->withTimestamps());
return $this->belongsToMany(SubService::class, 'conditions_service')->withPivot('weight')->withTimestamps();
}
}
class SubService extends Model
{
use Searchable;
use CrudTrait;
public function conditions()
{
return $this->belongsToMany(Condition::class, 'conditions_service')->withPivot('weight')->withTimestamps();
}
}
Here's my Custom Field Type:
<!-- select2 -->
<div @include('crud::inc.field_wrapper_attributes') >
<label>{!! $field['label'] !!}</label>
@include('crud::inc.field_translatable_icon')
<?php $entity_model = $crud->getModel(); ?>
<div class="row">
<div class="col-sm-12">
<table id="crudTable" class="table table-bordered table-striped display">
<thead>
<tr>
@if ($crud->details_row)
<th></th> <!-- expand/minimize button column -->
@endif
{{-- Table columns --}}
<th>Seleziona</th>
<th>Ordine</th>
{{--<th>Ordine <i class="fa fa-arrow-up" aria-hidden="true"></i></th>
<th>Ordine <i class="fa fa-arrow-down" aria-hidden="true"></i></th>--}}
{{--$tst = $connected_entity_entry->relService->whereIn('id', $connected_entity_entry->id)--}}
</tr>
</thead>
<tbody>
@foreach ($field['model']::all() as $connected_entity_entry) {{--var_dump((empty($connected_entity_entry->conditions->toArray())?"puppa":(empty($connected_entity_entry->conditions->whereIn('id', $connected_entity_entry->id)->toArray())?"puppa uguale":$connected_entity_entry->conditions->whereIn('id', $connected_entity_entry->id)))) --}}
{{-- dump($connected_entity_entry->getPriority($connected_entity_entry->id)) --}}
<tr>
<th scope="row">
<div class="col-sm-4">
<div class="checkbox">
<label>
<input type="checkbox"
name="{{ $field['name'] }}[]"
value="{{ $connected_entity_entry->id }}"
@if( ( old( $field["name"] ) && in_array($connected_entity_entry->id, old( $field["name"])) ) || (isset($field['value']) && in_array($connected_entity_entry->id, $field['value']->pluck('id', 'id')->toArray())))
checked="checked"
@endif > {!! $connected_entity_entry->{$field['attribute']} !!}
</label>
</div>
</div>
</th>
<td>{{--@include('crud::fields.number')--}}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
</div>
</div>
Thank you for your help! Dave
I found a solution thanks dense-team with his pull request (https://github.com/Laravel-Backpack/CRUD/pull/351)
Here's my code updated:
CrudController:
$this->crud->addField([
'label' => 'Servizi legati',
'type' => 'checklist_ordered',
'name' => 'relService',
'entity' => 'relService',
'attribute' => 'title',
'model' => "App\Models\SubService",
'pivot' => true,
'pivotFields' => [
'weight' => 'Ordinamento',
],
], 'update/create/both');
Here's my Custom Field Type:
<!-- select2 -->
<div @include('crud::inc.field_wrapper_attributes') >
<label>{!! $field['label'] !!}</label>
@include('crud::inc.field_translatable_icon')
@if (isset($field['model']))
<?php $entity_model = $crud->getModel();
$pivot_entries = null;
if (isset($entry)) {
$pivot_entries = $entry->{$field['entity']}->keyBy(function ($item) {
return $item->getKey();
});
}
?>
<div class="row">
<div class="col-sm-12">
<table id="crudTable" class="table table-bordered table-striped display">
<thead>
<tr>
@if ($crud->details_row)
<th></th> <!-- expand/minimize button column -->
@endif
{{-- Table columns --}}
<th>Seleziona</th>
@foreach($field['pivotFields'] as $pivot_chunk)
<th>{{$pivot_chunk}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($field['model']::all() as $connected_entity_entry)
<tr>
<th scope="row">
<div class="col-sm-4">
<div class="checkbox">
<label>
<input type="checkbox"
name="{{ $field['name'] }}[]"
value="{{ $connected_entity_entry->id }}"
@if( ( old( $field["name"] ) && in_array($connected_entity_entry->id, old( $field["name"])) ) || (isset($field['value']) && in_array($connected_entity_entry->id, $field['value']->pluck('id', 'id')->toArray())))
checked="checked"
@endif > {!! $connected_entity_entry->{$field['attribute']} !!}
</label>
</div>
</div>
</th>
<td>
@foreach(array_chunk($field['pivotFields'], 2, true) as $pivot_chunk)
@foreach ($pivot_chunk as $pivot_field => $pivot_name)
<?php
$pivot_attr = null;
if ($pivot_entries) {
if ($pivot_entries->has($connected_entity_entry->getKey())) {
$pivot = $pivot_entries->get($connected_entity_entry->getKey())->pivot;
$pivot_attr = $pivot->getAttribute($pivot_field);
}
}
?>
<input type="number"
name="{!! $pivot_field !!}[{{ $connected_entity_entry->getKey() }}]"
value="{{ $pivot_attr }}" @include('crud::inc.field_attributes') />
@endforeach
@endforeach
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endif
{{-- HINT --}}
@if (isset($field['hint']))
<p class="help-block">{!! $field['hint'] !!}</p>
@endif
</div>
</div>