如何在数据透视表中使用额外的列 table
How to use extra column in a pivot table
我需要制作一个自定义字段,就像清单一样,但在 table 中,还有第二个字段 "order"。
这是我的:
- 模型 1:条件与关系 "belongsToMany"
- 模型 2:子服务
这两个模型与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>
我需要制作一个自定义字段,就像清单一样,但在 table 中,还有第二个字段 "order"。
这是我的:
- 模型 1:条件与关系 "belongsToMany"
- 模型 2:子服务
这两个模型与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>