2017-01-12 6 views
0

Ich habe ein Formular, wo ich mehrere Werte übermitteln. Es ist ein dynamisches Formular, bei dem sich die Felder jedes Mal unterscheiden, aber nur die Anzahl der Felder, nicht die Felder selbst. Ich verwende das Folgende, um alle Daten in die Pivot-Tabelle einzufügen, aber ich denke kaum, dass dies ein guter Weg ist, dies zu tun. Gibt es einen guten Weg, dies zu erreichen, ohne vielleicht eine foreach zu benutzen? Gerade jetzt für nur 3 exercises Ich mache 12 Abfragen? xDLaravel Sync mehrere zusätzliche dynamische Werte

Die Pivot-Tabelle sieht wie folgt aus:

CREATE TABLE `exercise_training` (
    `id` int(10) UNSIGNED NOT NULL, 
    `exercise_id` int(10) UNSIGNED NOT NULL, 
    `training_id` int(10) UNSIGNED NOT NULL, 
    `exercise_set` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `exercise_repeat` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `exercise_weight` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `exercise_time` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL 
) 

Und hier ist der Code:

$checkedSets = $request['exercise_sets']; // Array of `set` values where the `key` is the `exercise_id` 
    $checkedRepeats = $request['exercise_repeats'];// Array of `repeat` values where the `key` is the `exercise_id` 
    $checkedWeights = $request['exercise_weights'];// Array of `weight` values where the `key` is the `exercise_id` 
    $checkedTimes = $request['exercise_times'];// Array of `time` values where the `key` is the `exercise_id` 

    foreach($checkedSets as $key => $value) 
    { 
     $training->exercises()->syncWithoutDetaching([$key => ['exercise_set' => $value]]); 
    } 

    foreach($checkedRepeats as $key => $value) 
    { 
     $training->exercises()->syncWithoutDetaching([$key => ['exercise_repeat' => $value]]); 
    } 

    foreach($checkedWeights as $key => $value) 
    { 
     $training->exercises()->syncWithoutDetaching([$key => ['exercise_weight' => $value]]); 
    } 

    foreach($checkedTimes as $key => $value) 
    { 
     $training->exercises()->syncWithoutDetaching([$key => ['exercise_time' => $value]]); 
    } 

Antwort

1

Von laravel documentation

You may also pass additional intermediate table values with the IDs: 

$user->roles()->sync([1 => ['expires' => true], 2, 3]); 
+1

Dank habe ich versuche das schon, aber ohne Erfolg , aber es könnte sein, dass ich es falsch gemacht habe. Ich habe mich schon eine Weile nicht mehr darum gekümmert, ich werde es mir später nochmal anschauen :) – Hardist