如何在数据透视表中使用额外的列 table

How to use extra column in a pivot table

我需要制作一个自定义字段,就像清单一样,但在 table 中,还有第二个字段 "order"。
这是我的:

这两个模型与tableproducts_service有两个foreign_keys加列"order"

的关系

我无法理解的是:
怎么用背包保存额外的信息。

我知道我可以使用这样的东西:

$user->roles()->updateExistingPivot($roleId, $attributes);

但是我应该把它放在哪里呢?

这是我的代码:

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();
  }
}

这是我的自定义字段类型:

<!-- 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>

感谢您的帮助! 戴夫

我找到了解决方案,感谢 dense-team 的拉取请求 (https://github.com/Laravel-Backpack/CRUD/pull/351)

这是我更新的代码:

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');

这是我的自定义字段类型:

<!-- 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>