2016-07-25 7 views
2

Ich versuche, ein Tag-löschen, das mit Kontrollkästchen funktioniert. Stellen Sie sich vor, der Benutzer hat ungefähr 10 Produkte und jedes Produkt hat 3 verschiedene Tags.Laravel - lösche mehrere Daten aus Pivot-Tabelle mit Checkbox

Derzeit kann der Benutzer nur ein einzelnes Tag löschen. Nach jedem Tag-Löschen wird die Seite aktualisiert und er kann ein anderes Tag löschen. Das ist nicht wirklich benutzerfreundlich. Deshalb versuche ich eine Mehrfachauswahl für Tags und lösche alle ausgewählten Tags mit einem Klick.

das ist wie es jetzt aussieht:

{!! Form::open(['action' => '[email protected]', 'method' => 'post']) !!} 
<div class="container"> 
    <div class="table-responsive"> 
      <thead> 
      <tr> 
       <th>Product</th> 
       <th>Tags</th> 
      </tr> 
      </thead> 
      <tbody> 
      @foreach($products as $product) 
       <tr> 
        <td>{{ $product->name }}</td> 
        <td> 
         @foreach($product->tags as $tag) 
          {!! Form::hidden('tag_id', $tag->id) !!} 
          <input type="checkbox" name="xxxxx" value="{{ xxxx }}"><br> 
         @endforeach 
        </td> 
       </tr> 
      @endforeach 
      </tbody> 
     </table> 
    </div> 
</div> 

{!! Form::button('Delete') !!} 
{!! Form::close() !!} 

Mein Problem ist, dass ich die product_id + tag_id brauchen, um sie zu lösen.

Wenn ich die Löschtaste drücken, erhalte ich diese Daten an meinen Controller übergeben:

{"tag_id":["285","284","285","286","279"],"product_id:"22"} 

Das Hauptproblem ist, dass mein Programm gibt mir nur die allerletzte product_id. Egal, ob ich einen Tag von diesem Produkt ausgewählt habe. Es gibt mir immer diese product_id. Ich brauche auch etwas wie ein Mehrfach-Array, das an meinen Controller weitergegeben wird, um damit zu arbeiten.

So etwas wäre perfekt:

[0] = product_id = 1 
     tag_id = 50,60,80 
[1] = product_id = 2 
     tag_id = 11,22,33 
.... 

Meine Antwort auf Ihre Antwort:

Es tut mir leid für meine späte Antwort ..

ich es versucht habe und es funktioniert fast perfekt. Das einzige Problem ist, dass wenn zwei verschiedene Produkte das gleiche Tag haben, mein Programm nur das letzte Produkt mit seinem Tag zurückgibt. zum Beispiel: product_id2 tag_id 3: tag_id 3 bestanden

Aber ich bekomme nur die letzte product_id mit dem Tag

product_id 1 und 2 product_id haben 3.

Als Ausgang Ich brauche tag_id: product_id1 Alle anderen Produkte mit derselben tag_id werden ignoriert. So erhalte ich dies nur als Ergebnis:

product_id2 : tag_id3.

Ich hoffe, Sie verstehen, was ich versuche, mein Englisch zu sagen .. ist nicht die beste ..

+0

Warum verwenden Sie keine "konstruierte" ID - wie die, die Sie bereits vorschlagen - für den Wert der Checkbox? Benennen Sie das Kontrollkästchen 'Löschen' oder etwas. Der Wert ist '' 'product_id .'- '. Tag_id'''. Dann sollten Sie ein Array in Ihren Controller bekommen wie '' '{'todelete': ['22-285', '22 -285 ', '23 -284', ...]' '' welches Sie einfach wieder dekonstruieren können um die richtigen Tags auf den Produkten zu löschen. – Kjell

Antwort

1

Sie das passieren kann Checkbox als Array Feld wie diese, mit Schlüssel als Tag-ID und Wert ist die Produkt-ID,

@foreach($product->tags as $tag) 
<input type="checkbox" name="tagtodelete[{{ $tag->id.'-'.$product->id }}]" value="{{ $product->id }}"><br> 
@endforeach 

und in Ihrem Controller können Sie den Wert als Array erhalten,

$tagsleftoffs = (array) $request->input('tagtodelete'); 
foreach($tagsleftoffs as $tagId => $productId){ 
//perform your action here 
$productId = explode('-',$tagId); 
echo $productId[0] ; //is tag Id 
echo $productId[1] ; //is product Id 
} 
+0

Es tut mir leid, dass ich so spät geantwortet habe. Ich hatte letzte Nacht Probleme mit meiner Verbindung - ich werde es ausprobieren! – WellNo

+0

Hinweis, auf Formular senden, was auch immer Checkboxen derzeit überprüft wird in der Anfrage verfügbar sein, so dass Sie alle anderen zuvor hinzugefügt Tags, die nicht in den Post-Daten, sind gelöschte Tags, davon ausgehend, dass Sie die Datenbank aktualisieren können –

+0

annehmen können Bitte überprüfe meine Frage. Ich habe deine Antwort aktualisiert. Mein Code ist jetzt genau wie Ihre Antwort – WellNo

0

Formular Checkbox

Sie Tag-ID und Produkt-ID durch Checkbox Wert passieren kann.

@foreach($product->tags as $tag) 
<input type="checkbox" name="tagProductInfos[]" value="{{ $tag->id.'-'.$product->id }}"><br> 
@endforeach 

-Controller Erhalten fucntion:

Und dann erhalten Sie den Wert und trennen Sie die Tag-ID, Produkt-ID.

foreach($request->get('tagProductInfos') as $tagInfo){ 
     $explodedData = explode('-',$tagInfo); 
     $tagId = $explodedData[0] ; //is tag Id 
     $productId = $explodedData[1] ; //is product Id 
     echo 'tagId='.$tagId.' productId='.$productId.'<br>'; 
    } 
Verwandte Themen