2017-02-24 3 views
0

Je dois créer un champ personnalisé comme une liste de contrôle, mais dans une table et avec un deuxième champ "ordre".
C'est ce que j'ai:Comment utiliser une colonne supplémentaire dans un tableau croisé dynamique

  • Modèle 1: Conditions avec les relations "belongsToMany"
  • Modèle 2: Subservices

Ces deux modèles sont en relations avec la table products_service qui a les deux foreign_keys plus la colonne "order"

Ce que je ne peux pas comprendre est:
Comment pourrait enregistrer les informations supplémentaires avec sac à dos.

Je sais que je peux utiliser quelque chose comme ceci:

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

mais où dois-je le mettre?

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

Voici mon type de champ personnalisé:

<!-- 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>{{[email protected]('crud::fields.number')--}} 

        </td> 
       </tr> 
       @endforeach 
       </tbody> 
      </table> 
     </div> 

     {{-- HINT --}} 
     @if (isset($field['hint'])) 
      <p class="help-block">{!! $field['hint'] !!}</p> 
     @endif 
    </div> 
</div> 

Merci pour votre aide! Dave

+0

J'ai amélioré la mise en forme de votre q uestion et ajouté un caractère '}' à la fin de votre deuxième classe pour compléter l'exemple de code. – zx485

Répondre

0

J'ai trouvé une solution grâce équipe dense avec sa demande de traction (https://github.com/Laravel-Backpack/CRUD/pull/351)

Voici mon code mis à jour:

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

Voici mon type de champ personnalisé:

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