Laravel - Eloquent sync () вставляет одинаковое значение в каждую строку - PullRequest
0 голосов
/ 08 декабря 2018

Итак, я только что узнал, как использовать вложенные итерации для загрузки данных из сводной таблицы.Сейчас я пытаюсь сохранить данные, но не могу.

У меня есть «новый» блэйд, с помощью которого клиент может создать новый «Заказ» со многими «продуктами».

Лезвие в основном просто перебирает все доступные Product с.(Насколько я могу судить, именно так нужно настроить блейд)

new.blade.php

{!! Form::open(['url' => '/orders/store']) !!}
@foreach ($products as $product)

  <h1>{{ $product->name }}</h1>
  <p>{{ $product->description }}</p>

  {{ Form::text('qty', null }}

@endforeach

Итак, это моя попытка использовать вложенную итерацию для передачиданные «кол-во» в сводную таблицу.

OrderController.php

public function store(Request $request)
{
    $user = Auth::user();
    $user->load("orders.products"); //eager load pivot table

    /*NEW ORDER*/
    $order = new Order;
    $order->user_id = Auth::user()->id;
    $order->save();

    $product_id_array = [];

    /*PIVOT*/
    $products_to_sync_ids = [ 1,2,3,4,5,6,7,8,9 ];
    $sync_data = [];
    for ($i = 0; $i < count($products_to_sync_ids); $i++) {
        $qty = $request->input('qty');
        $sync_data[$products_to_sync_ids[$i]] = ['qty' => $qty];
    }

    $order->products()->sync($sync_data);

«Порядок» сохраняется, но кол-во всегда по умолчанию соответствует последнему Product с введенному кол-ву.

1 Ответ

0 голосов
/ 08 декабря 2018

Вы определяете ввод текста с одним и тем же именем 'qty' несколько раз, поэтому, когда вы отправляете форму, она выдаст вам значение последнего текстового поля с именем 'qty'.

В этом случае выполе qty должно быть определено как массив типа:

{{ Form::text('qty[]', null }}

И при извлечении его значения вам нужно будет выполнить его итерацию:

$qty = $request->input('qty');
for ($i = 0; $i < count($products_to_sync_ids); $i++) {
    $sync_data[$products_to_sync_ids[$i]] = ['qty' => $qty[$i]];
}

Это может помочь вам достичь того, чего вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...